Om du stöter på felmeddelande 11537, nivå 16 i SQL Server, är chansen stor att du försöker köra en lagrad procedur genom att använda WITH RESULT SETS
klausul, men du har inte inkluderat alla kolumner i din definition.
När du använder WITH RESULT SETS
sats i EXECUTE
/EXEC
måste du ge en definition för alla kolumner som returneras av den lagrade proceduren. Om du inte gör det får du det här felet.
Exempel
Följande lagrade procedur returnerar tre kolumner.
EXEC sp_getCityById @CityId = 1;
Resultat:
+------------+----------------------------+-----------------------------+ | CityName | LatestRecordedPopulation | ValidFrom | |------------+----------------------------+-----------------------------| | Aaronsburg | 613 | 2013-01-01 00:00:00.0000000 | +------------+----------------------------+-----------------------------+
Anta nu att vi vill omdefiniera några av kolumnerna. Vi kan använda WITH RESULT SETS
klausul för att göra det.
Problemkod
Men om vi inte inkluderar alla tre kolumnerna i den här klausulen får vi ett felmeddelande.
EXEC sp_getCityById @CityId = 1
WITH RESULT SETS
(
(
[City] nvarchar(50),
[Population] int
)
);
Resultat:
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.
Felmeddelandet talar om för oss hur många kolumner vi angav och hur många som skickades av den lagrade proceduren.
I det här fallet angav vi två kolumner men proceduren skickade tre.
Bra kod
Vi kan åtgärda det här problemet genom att inkludera den tredje kolumnen.
EXEC sp_getCityById @CityId = 1
WITH RESULT SETS
(
(
[City] nvarchar(50),
[Population] int,
[Valid From] date
)
);
Resultat:
------------+--------------+--------------+ | City | Population | Valid From | |------------+--------------+--------------| | Aaronsburg | 613 | 2013-01-01 | +------------+--------------+--------------+