Hvis du støder på fejlmeddelelse 11535, niveau 16, mens du forsøger at udføre en lagret procedure, er det fordi du ikke har defineret nok resultatsæt i WITH RESULT SETS
klausul.
Nogle lagrede procedurer returnerer flere resultatsæt. Når du bruger MED RESULTATSÆT
klausul, skal du definere hvert forventet resultatsæt. Du skal gøre dette, selvom du kun ønsker at ændre definitionen af et eller nogle af resultatsættene.
For at rette denne fejl skal du blot tilføje de yderligere resultatsæt til MED RESULTATSÆT
klausul, hver adskilt af et komma.
Du kan også rette det ved at fjerne MED RESULTATSÆT
klausul, men jeg antager, at du bruger den af en grund (dvs. du skal omdefinere det resultatsæt, der returneres af proceduren).
Eksempel på kode, der forårsager fejlen
Antag, at vi har en lagret procedure, der returnerer tre resultatsæt.
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)
Og sig, at vi vil bruge
Hvis du gør det med følgende kode, produceres der en fejl.
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.
Dette skyldes, at vi ikke inkluderede de andre resultatsæt i WITH RESULT SETS
klausul.
Løsningen
Løsningen er at inkludere de andre resultatsæt 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 er nu løst.