Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment réparer "l'instruction EXECUTE a échoué car sa clause WITH RESULT SETS a spécifié 1 jeu(x) de résultats..." dans SQL Server

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.