Om du stöter på felmeddelande 11535, nivå 16 när du försöker köra en lagrad procedur, beror det på att du inte definierade tillräckligt många resultatuppsättningar i WITH RESULT SETS
klausul.
Vissa lagrade procedurer returnerar flera resultatuppsättningar. När du använder WITH RESULT SETS
klausul måste du definiera varje förväntat resultatuppsättning. Du måste göra detta även om du bara vill ändra definitionen av en eller några av resultatuppsättningarna.
För att åtgärda detta fel, lägg helt enkelt till de ytterligare resultatuppsättningarna till WITH RESULT SETS
sats, var och en separerad med ett kommatecken.
Du kan också fixa det genom att ta bort WITH RESULT SETS
klausul, men jag antar att du använder den av en anledning (dvs. du måste omdefiniera resultatuppsättningen som returneras av proceduren).
Exempel på kod som orsakar felet
Anta att vi har en lagrad procedur som returnerar tre resultatuppsättningar.
EXEC sp_getCityStateCountryByCityId @CityId = 1;
Resultat:
+------------+----------------------------+-----------------------------+ | 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)
Och säg att vi vill använda WITH RESULT SETS
sats för att omdefiniera kolumnerna i endast den första resultatuppsättningen.
Om du gör det med följande kod uppstår ett fel.
EXEC sp_getCityStateCountryByCityId @CityId = 1
WITH RESULT SETS
(
(
[City] nvarchar(50),
[Population] int,
[Valid From] date
)
);
Resultat:
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.
Detta beror på att vi inte inkluderade de andra resultatuppsättningarna i WITH RESULT SETS
klausul.
Lösningen
Lösningen är att inkludera de andra resultatuppsättningarna i WITH RESULT SETS
klausul.
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
)
);
Resultat:
+------------+--------------+--------------+ | 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)
Problemet har nu åtgärdats.