Pokud narazíte na chybu Msg 11537, Level 16 na SQL Server, je pravděpodobné, že se pokoušíte spustit uloženou proceduru pomocí WITH RESULT SETS
klauzule, ale nezahrnuli jste do své definice všechny sloupce.
Když použijete WITH RESULT SETS
klauzule v EXECUTE
/EXEC
musíte zadat definici pro všechny sloupce vrácené uloženou procedurou. Pokud tak neučiníte, zobrazí se tato chyba.
Příklad
Následující uložená procedura vrátí tři sloupce.
EXEC sp_getCityById @CityId = 1;
Výsledek:
+------------+----------------------------+-----------------------------+ | CityName | LatestRecordedPopulation | ValidFrom | |------------+----------------------------+-----------------------------| | Aaronsburg | 613 | 2013-01-01 00:00:00.0000000 | +------------+----------------------------+-----------------------------+
Nyní předpokládejme, že chceme předefinovat některé sloupce. Můžeme použít WITH RESULT SETS
klauzule k tomu.
Kód problému
Pokud však do této klauzule nezahrneme všechny tři sloupce, dostaneme chybu.
EXEC sp_getCityById @CityId = 1
WITH RESULT SETS
(
(
[City] nvarchar(50),
[Population] int
)
);
Výsledek:
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.
Chybová zpráva nám říká, kolik sloupců jsme zadali a kolik jich bylo odesláno uloženou procedurou.
V tomto případě jsme zadali dva sloupce, ale procedura poslala tři.
Dobrý kód
Tento problém můžeme vyřešit zahrnutím třetího sloupce.
EXEC sp_getCityById @CityId = 1
WITH RESULT SETS
(
(
[City] nvarchar(50),
[Population] int,
[Valid From] date
)
);
Výsledek:
------------+--------------+--------------+ | City | Population | Valid From | |------------+--------------+--------------| | Aaronsburg | 613 | 2013-01-01 | +------------+--------------+--------------+