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

So beheben Sie „EXECUTE-Anweisung fehlgeschlagen, weil ihre WITH RESULT SETS-Klausel 1 Ergebnismenge(n) angegeben hat…“ in SQL Server

Wenn beim Versuch, eine gespeicherte Prozedur auszuführen, die Fehlermeldung 11535, Ebene 16 auftritt, liegt dies daran, dass Sie nicht genügend Ergebnismengen in den WITH RESULT SETS definiert haben Klausel.

Einige gespeicherte Prozeduren geben mehrere Resultsets zurück. Bei Verwendung der WITH RESULT SETS -Klausel müssen Sie jede erwartete Ergebnismenge definieren. Dies ist auch dann erforderlich, wenn Sie nur die Definition einer oder einiger Ergebnismengen ändern möchten.

Um diesen Fehler zu beheben, fügen Sie einfach die zusätzlichen Ergebnissätze zu den WITH RESULT SETS hinzu Klausel, jeweils getrennt durch ein Komma.

Sie können es auch beheben, indem Sie WITH RESULT SETS entfernen -Klausel, aber ich gehe davon aus, dass Sie sie aus einem bestimmten Grund verwenden (d. h. Sie müssen die von der Prozedur zurückgegebene Ergebnismenge neu definieren).

Beispiel für Code, der den Fehler verursacht

Angenommen, wir haben eine gespeicherte Prozedur, die drei Ergebnismengen zurückgibt.

EXEC sp_getCityStateCountryByCityId @CityId = 1;

Ergebnis:

+------------+----------------------------+-----------------------------+
| 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)

Und sagen wir, wir wollen die WITH RESULT SETS verwenden -Klausel, um nur die Spalten der ersten Ergebnismenge neu zu definieren.

Wenn Sie dies mit dem folgenden Code tun, wird ein Fehler erzeugt.

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

Ergebnis:

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.

Dies liegt daran, dass wir die anderen Ergebnismengen nicht in die WITH RESULT SETS aufgenommen haben Klausel.

Die Lösung

Die Lösung besteht darin, die anderen Ergebnismengen in die WITH RESULT SETS aufzunehmen Klausel.

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
    )
);

Ergebnis:

+------------+--------------+--------------+
| 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)

Das Problem wurde nun behoben.