Se você encontrar a mensagem de erro 11537, nível 16 no SQL Server, é provável que esteja tentando executar um procedimento armazenado usando o
WITH RESULT SETS
cláusula, mas você não incluiu todas as colunas em sua definição. Quando você usa o
WITH RESULT SETS
cláusula no EXECUTE
/EXEC
instrução, você deve fornecer uma definição para todas as colunas retornadas pelo procedimento armazenado. Se você não fizer isso, você receberá esse erro. Exemplo
O procedimento armazenado a seguir retorna três colunas.
EXEC sp_getCityById @CityId = 1;
Resultado:
+------------+----------------------------+-----------------------------+ | CityName | LatestRecordedPopulation | ValidFrom | |------------+----------------------------+-----------------------------| | Aaronsburg | 613 | 2013-01-01 00:00:00.0000000 | +------------+----------------------------+-----------------------------+
Agora, suponha que queremos redefinir algumas das colunas. Podemos usar o
WITH RESULT SETS
cláusula para fazer isso. Código do problema
Mas se não incluirmos todas as três colunas nesta cláusula, receberemos um erro.
EXEC sp_getCityById @CityId = 1
WITH RESULT SETS
(
(
[City] nvarchar(50),
[Population] int
)
);
Resultado:
Msg 11537, Level 16, State 1, Procedure sp_getCityById, Line 5 EXECUTE statement failed because its WITH RESULT SETS clause specified 2 column(s) for result set number 1, but the statement sent 3 column(s) at run time.
A mensagem de erro nos informa quantas colunas especificamos e quantas foram enviadas pelo procedimento armazenado.
Nesse caso, especificamos duas colunas, mas o procedimento enviou três.
Bom Código
Podemos corrigir esse problema incluindo a terceira coluna.
EXEC sp_getCityById @CityId = 1
WITH RESULT SETS
(
(
[City] nvarchar(50),
[Population] int,
[Valid From] date
)
);
Resultado:
------------+--------------+--------------+ | City | Population | Valid From | |------------+--------------+--------------| | Aaronsburg | 613 | 2013-01-01 | +------------+--------------+--------------+