Ако срещнете грешка Msg 11535, ниво 16, докато се опитвате да изпълните съхранена процедура, това е защото не сте дефинирали достатъчно набори от резултати в WITH RESULT SETS
клауза.
Някои съхранени процедури връщат множество набори от резултати. Когато използвате WITH RESULT SETS
клауза, трябва да дефинирате всеки очакван набор от резултати. Трябва да направите това, дори ако искате да промените само определението на един или някои от наборите от резултати.
За да коригирате тази грешка, просто добавете допълнителните набори от резултати към WITH RESULT SETS
клауза, всяка отделена със запетая.
Можете също да го поправите, като премахнете WITH RESULT SETS
клауза, но предполагам, че го използвате по някаква причина (т.е. трябва да предефинирате резултатния набор, върнат от процедурата).
Пример за код, който причинява грешката
Да предположим, че имаме съхранена процедура, която връща три набора резултати.
EXEC sp_getCityStateCountryByCityId @CityId = 1;
Резултат:
+------------+----------------------------+-----------------------------+ | 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)
И да кажем, че искаме да използваме WITH RESULT SETS
клауза за предефиниране на колоните само на първия набор от резултати.
Ако го направите със следния код, това ще доведе до грешка.
EXEC sp_getCityStateCountryByCityId @CityId = 1
WITH RESULT SETS
(
(
[City] nvarchar(50),
[Population] int,
[Valid From] date
)
);
Резултат:
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.
Това е така, защото не включихме другите набори от резултати в WITH RESULT SETS
клауза.
Решението
Решението е да включите другите набори от резултати в WITH RESULT SETS
клауза.
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
)
);
Резултат:
+------------+--------------+--------------+ | 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)
Проблемът вече е отстранен.