Jeśli podczas próby wykonania procedury składowanej wystąpi błąd Msg 11535, poziom 16, oznacza to, że nie zdefiniowano wystarczającej liczby zestawów wyników w WITH RESULT SETS
klauzula.
Niektóre procedury składowane zwracają wiele zestawów wyników. Podczas korzystania z WITH RESULT SETS
klauzula, musisz zdefiniować każdy oczekiwany zestaw wyników. Musisz to zrobić, nawet jeśli chcesz zmienić tylko definicję jednego lub kilku zestawów wyników.
Aby naprawić ten błąd, po prostu dodaj dodatkowe zestawy wyników do WITH RESULT SETS
klauzula, każda oddzielona przecinkiem.
Możesz to również naprawić, usuwając WITH RESULT SETS
klauzuli, ale zakładam, że używasz jej z jakiegoś powodu (tj. musisz przedefiniować zestaw wyników zwracany przez procedurę).
Przykład kodu, który powoduje błąd
Załóżmy, że mamy procedurę składowaną, która zwraca trzy zestawy wyników.
EXEC sp_getCityStateCountryByCityId @CityId = 1;
Wynik:
+------------+----------------------------+-----------------------------+ | 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)
I powiedzmy, że chcemy użyć WITH RESULT SETS
klauzula, aby ponownie zdefiniować kolumny tylko pierwszego zestawu wyników.
Wykonanie tego za pomocą poniższego kodu spowoduje błąd.
EXEC sp_getCityStateCountryByCityId @CityId = 1
WITH RESULT SETS
(
(
[City] nvarchar(50),
[Population] int,
[Valid From] date
)
);
Wynik:
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.
Dzieje się tak, ponieważ nie uwzględniliśmy innych zestawów wyników w WITH RESULT SETS
klauzula.
Rozwiązanie
Rozwiązaniem jest uwzględnienie innych zestawów wyników w WITH RESULT SETS
klauzula.
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
)
);
Wynik:
+------------+--------------+--------------+ | 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)
Problem został rozwiązany.