Pokud při pokusu o provedení uložené procedury narazíte na chybu Msg 11535, Level 16, je to proto, že jste nedefinovali dostatek sad výsledků v WITH RESULT SETS
doložka.
Některé uložené procedury vracejí více sad výsledků. Při použití WITH RESULT SETS
klauzule, musíte definovat každou očekávanou sadu výsledků. Musíte to udělat, i když chcete změnit pouze definici jedné nebo některých sad výsledků.
Chcete-li tuto chybu opravit, jednoduše přidejte další sady výsledků do WITH RESULT SETS
klauzule, každá oddělená čárkou.
Můžete to také opravit odstraněním WITH RESULT SETS
klauzuli, ale předpokládám, že ji používáte z nějakého důvodu (tj. musíte předefinovat sadu výsledků vrácenou procedurou).
Příklad kódu, který způsobuje chybu
Předpokládejme, že máme uloženou proceduru, která vrací tři sady výsledků.
EXEC sp_getCityStateCountryByCityId @CityId = 1;
Výsledek:
+------------+----------------------------+-----------------------------+ | CityName | LatestRecordedPopulation | ValidFrom | |------------+----------------------------+-----------------------------| | Aaronsburg | 613 | 2013-01-01 00:00:00.0000000 | +------------+----------------------------+-----------------------------+ (1 row affected) +---------------------+---------------------+----------------------------+ | StateProvinceCode | StateProvinceName | LatestRecordedPopulation | |---------------------+---------------------+----------------------------| | PA | Pennsylvania | 13284753 | +---------------------+---------------------+----------------------------+ (1 row affected) +-----------------+---------------+----------------------------+ | IsoAlpha3Code | CountryName | LatestRecordedPopulation | |-----------------+---------------+----------------------------| | USA | United States | 313973000 | +-----------------+---------------+----------------------------+ (1 row affected)
A řekněme, že chceme použít WITH RESULT SETS
klauzule k předefinování sloupců pouze první sady výsledků.
Pokud to uděláte s následujícím kódem, dojde k chybě.
EXEC sp_getCityStateCountryByCityId @CityId = 1
WITH RESULT SETS
(
(
[City] nvarchar(50),
[Population] int,
[Valid From] date
)
);
Výsledek:
Msg 11535, Level 16, State 1, Procedure sp_getCityStateCountryByCityId, Line 14 EXECUTE statement failed because its WITH RESULT SETS clause specified 1 result set(s), and the statement tried to send more result sets than this.
Je to proto, že jsme do WITH RESULT SETS
nezahrnuli ostatní sady výsledků doložka.
Řešení
Řešením je zahrnout ostatní sady výsledků do WITH RESULT SETS
doložka.
EXEC sp_getCityStateCountryByCityId @CityId = 1
WITH RESULT SETS
(
(
[City] nvarchar(50),
[Population] int,
[Valid From] date
),
(
[State Code] nvarchar(5),
[State Name] nvarchar(50),
[Population] int
),
(
[Country Code] nvarchar(3),
[Country Name] nvarchar(60),
[Population] int
)
);
Výsledek:
+------------+--------------+--------------+ | City | Population | Valid From | |------------+--------------+--------------| | Aaronsburg | 613 | 2013-01-01 | +------------+--------------+--------------+ (1 row affected) +--------------+--------------+--------------+ | State Code | State Name | Population | |--------------+--------------+--------------| | PA | Pennsylvania | 13284753 | +--------------+--------------+--------------+ (1 row affected) +----------------+----------------+--------------+ | Country Code | Country Name | Population | |----------------+----------------+--------------| | USA | United States | 313973000 | +----------------+----------------+--------------+ (1 row affected)
Problém je nyní vyřešen.