Si vous rencontrez l'erreur Msg 11535, niveau 16 en essayant d'exécuter une procédure stockée, c'est parce que vous n'avez pas défini suffisamment de jeux de résultats dans le WITH RESULT SETS
clause.
Certaines procédures stockées renvoient plusieurs jeux de résultats. Lors de l'utilisation de WITH RESULT SETS
clause, vous devez définir chaque jeu de résultats attendu. Vous devez le faire même si vous souhaitez uniquement modifier la définition d'un ou de certains des ensembles de résultats.
Pour corriger cette erreur, ajoutez simplement les jeux de résultats supplémentaires au WITH RESULT SETS
clause, chacune séparée par une virgule.
Vous pouvez également le résoudre en supprimant le WITH RESULT SETS
clause, mais je suppose que vous l'utilisez pour une raison (c'est-à-dire que vous devez redéfinir le jeu de résultats renvoyé par la procédure).
Exemple de code qui provoque l'erreur
Supposons que nous ayons une procédure stockée qui renvoie trois jeux de résultats.
EXEC sp_getCityStateCountryByCityId @CityId = 1;
Résultat :
+------------+----------------------------+-----------------------------+ | 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)
Et disons que nous voulons utiliser le WITH RESULT SETS
clause pour redéfinir les colonnes du premier jeu de résultats uniquement.
Le faire avec le code suivant produira une erreur.
EXEC sp_getCityStateCountryByCityId @CityId = 1
WITH RESULT SETS
(
(
[City] nvarchar(50),
[Population] int,
[Valid From] date
)
);
Résultat :
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.
C'est parce que nous n'avons pas inclus les autres ensembles de résultats dans le WITH RESULT SETS
clause.
La solution
La solution consiste à inclure les autres ensembles de résultats dans le WITH RESULT SETS
clause.
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
)
);
Résultat :
+------------+--------------+--------------+ | 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)
Le problème est maintenant résolu.