Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

So beheben Sie „EXECUTE-Anweisung fehlgeschlagen, weil ihre WITH RESULT SETS-Klausel 2 Spalte(n) für Ergebnismenge angegeben hat…“ Msg 11537 in SQL Server

Wenn in SQL Server die Fehlermeldung 11537, Ebene 16 auftritt, versuchen Sie möglicherweise, eine gespeicherte Prozedur mithilfe von WITH RESULT SETS auszuführen -Klausel, aber Sie haben nicht alle Spalten in Ihre Definition aufgenommen.

Wenn Sie die WITH RESULT SETS verwenden -Klausel in EXECUTE /EXEC -Anweisung müssen Sie eine Definition für alle Spalten bereitstellen, die von der gespeicherten Prozedur zurückgegeben werden. Wenn Sie dies nicht tun, erhalten Sie diesen Fehler.

Beispiel

Die folgende gespeicherte Prozedur gibt drei Spalten zurück.

EXEC sp_getCityById @CityId = 1;

Ergebnis:

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

Angenommen, wir möchten einige der Spalten neu definieren. Wir können die WITH RESULT SETS verwenden Klausel dazu.

Problemcode

Wenn wir jedoch nicht alle drei Spalten in diese Klausel aufnehmen, erhalten wir eine Fehlermeldung.

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

Ergebnis:

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.

Die Fehlermeldung teilt uns mit, wie viele Spalten wir angegeben haben und wie viele von der gespeicherten Prozedur gesendet wurden.

In diesem Fall haben wir zwei Spalten angegeben, aber die Prozedur hat drei gesendet.

Guter Code

Wir können dieses Problem beheben, indem wir die dritte Spalte einbeziehen.

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

Ergebnis:

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