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é 2 colonnes pour le jeu de résultats…" Msg 11537 dans SQL Server

Si vous rencontrez l'erreur Msg 11537, niveau 16 dans SQL Server, il est probable que vous essayez d'exécuter une procédure stockée en utilisant le WITH RESULT SETS clause, mais vous n'avez pas inclus toutes les colonnes dans votre définition.

Lorsque vous utilisez le WITH RESULT SETS clause dans EXECUTE /EXEC , vous devez fournir une définition pour toutes les colonnes renvoyées par la procédure stockée. Si vous ne le faites pas, vous obtiendrez cette erreur.

Exemple

La procédure stockée suivante renvoie trois colonnes.

EXEC sp_getCityById @CityId = 1;

Résultat :

+------------+----------------------------+-----------------------------+
| CityName   | LatestRecordedPopulation   | ValidFrom                   |
|------------+----------------------------+-----------------------------|
| Aaronsburg | 613                        | 2013-01-01 00:00:00.0000000 |
+------------+----------------------------+-----------------------------+

Supposons maintenant que nous voulions redéfinir certaines des colonnes. Nous pouvons utiliser le WITH RESULT SETS clause pour le faire.

Code du problème

Mais si nous n'incluons pas les trois colonnes dans cette clause, nous obtiendrons une erreur.

EXEC sp_getCityById @CityId = 1
    WITH RESULT SETS   
    (  
        (
            [City] nvarchar(50),
            [Population] int
        )
    );

Résultat :

Msg 11537, Level 16, State 1, Procedure sp_getCityById, Line 5
EXECUTE statement failed because its WITH RESULT SETS clause specified 2 column(s) for result set number 1, but the statement sent 3 column(s) at run time.

Le message d'erreur nous indique combien de colonnes nous avons spécifiées et combien ont été envoyées par la procédure stockée.

Dans ce cas, nous avons spécifié deux colonnes mais la procédure en a envoyé trois.

Bon code

Nous pouvons résoudre ce problème en incluant la troisième colonne.

EXEC sp_getCityById @CityId = 1
    WITH RESULT SETS   
    (  
        (
            [City] nvarchar(50),
            [Population] int,
            [Valid From] date
        )
    );

Résultat :

------------+--------------+--------------+
| City       | Population   | Valid From   |
|------------+--------------+--------------|
| Aaronsburg | 613          | 2013-01-01   |
+------------+--------------+--------------+