Si encuentra el mensaje de error 11537, nivel 16 en SQL Server, lo más probable es que esté intentando ejecutar un procedimiento almacenado utilizando WITH RESULT SETS
cláusula, pero no ha incluido todas las columnas en su definición.
Cuando usas WITH RESULT SETS
cláusula en EXECUTE
/EXEC
declaración, debe proporcionar una definición para todas las columnas devueltas por el procedimiento almacenado. Si no lo hace, obtendrá este error.
Ejemplo
El siguiente procedimiento almacenado devuelve tres columnas.
EXEC sp_getCityById @CityId = 1;
Resultado:
+------------+----------------------------+-----------------------------+ | CityName | LatestRecordedPopulation | ValidFrom | |------------+----------------------------+-----------------------------| | Aaronsburg | 613 | 2013-01-01 00:00:00.0000000 | +------------+----------------------------+-----------------------------+
Ahora, supongamos que queremos redefinir algunas de las columnas. Podemos usar WITH RESULT SETS
cláusula para hacer eso.
Código de problema
Pero si no incluimos las tres columnas en esta cláusula, obtendremos un error.
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.
El mensaje de error nos dice cuántas columnas especificamos y cuántas envió el procedimiento almacenado.
En este caso, especificamos dos columnas pero el procedimiento envió tres.
Buen código
Podemos solucionar este problema incluyendo la tercera columna.
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 | +------------+--------------+--------------+