Als u foutbericht 11535, niveau 16 tegenkomt terwijl u probeert een opgeslagen procedure uit te voeren, komt dat omdat u niet genoeg resultaatsets hebt gedefinieerd in de WITH RESULT SETS
clausule.
Sommige opgeslagen procedures retourneren meerdere resultaatsets. Bij gebruik van de WITH RESULT SETS
clausule, moet u elke set met verwachte resultaten definiëren. U moet dit zelfs doen als u alleen de definitie van een of enkele resultaatsets wilt wijzigen.
Om deze fout op te lossen, voegt u gewoon de extra resultatensets toe aan de WITH RESULT SETS
clausule, elk gescheiden door een komma.
U kunt het ook oplossen door de WITH RESULT SETS
. te verwijderen clausule, maar ik neem aan dat je het met een reden gebruikt (d.w.z. je moet de resultatenset die door de procedure wordt geretourneerd) opnieuw definiëren.
Voorbeeld van code die de fout veroorzaakt
Stel dat we een opgeslagen procedure hebben die drie resultaatsets retourneert.
EXEC sp_getCityStateCountryByCityId @CityId = 1;
Resultaat:
+------------+----------------------------+-----------------------------+ | 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)
En stel dat we de WITH RESULT SETS
. willen gebruiken om de kolommen van alleen de eerste resultaatset opnieuw te definiëren.
Als je het met de volgende code doet, krijg je een fout.
EXEC sp_getCityStateCountryByCityId @CityId = 1
WITH RESULT SETS
(
(
[City] nvarchar(50),
[Population] int,
[Valid From] date
)
);
Resultaat:
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.
Dit komt omdat we de andere resultatensets niet hebben opgenomen in de WITH RESULT SETS
clausule.
De oplossing
De oplossing is om de andere resultatensets op te nemen in de WITH RESULT SETS
clausule.
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
)
);
Resultaat:
+------------+--------------+--------------+ | 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)
Het probleem is nu verholpen.