Hvis du støder på fejlmeddelelse 11537, niveau 16 i SQL Server, er chancerne for, at du forsøger at udføre en lagret procedure ved at bruge WITH RESULT SETS
klausul, men du har ikke inkluderet alle kolonnerne i din definition.
Når du bruger WITH RESULT SETS
klausul i EXECUTE
/EXEC
sætning, skal du angive en definition for alle kolonner, der returneres af den lagrede procedure. Hvis du ikke gør det, får du denne fejl.
Eksempel
Den følgende lagrede procedure returnerer tre kolonner.
EXEC sp_getCityById @CityId = 1;
Resultat:
+------------+----------------------------+-----------------------------+ | CityName | LatestRecordedPopulation | ValidFrom | |------------+----------------------------+-----------------------------| | Aaronsburg | 613 | 2013-01-01 00:00:00.0000000 | +------------+----------------------------+-----------------------------+
Antag nu, at vi vil omdefinere nogle af kolonnerne. Vi kan bruge WITH RESULT SETS
klausul for at gøre det.
Problemkode
Men hvis vi ikke inkluderer alle tre kolonner i denne klausul, får vi en fejl.
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.
Fejlmeddelelsen fortæller os, hvor mange kolonner vi har angivet, og hvor mange der blev sendt af den lagrede procedure.
I dette tilfælde specificerede vi to kolonner, men proceduren sendte tre.
God kode
Vi kan løse dette problem ved at inkludere den tredje kolonne.
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 | +------------+--------------+--------------+