sql >> Databasteknik >  >> RDS >> Sqlserver

Så här fixar du "EXECUTE-satsen misslyckades eftersom dess WITH RESULT SETS-sats specificerade 1 resultatuppsättning(ar)..." i SQL Server

Om du stöter på felmeddelande 11535, nivå 16 när du försöker köra en lagrad procedur, beror det på att du inte definierade tillräckligt många resultatuppsättningar i WITH RESULT SETS klausul.

Vissa lagrade procedurer returnerar flera resultatuppsättningar. När du använder WITH RESULT SETS klausul måste du definiera varje förväntat resultatuppsättning. Du måste göra detta även om du bara vill ändra definitionen av en eller några av resultatuppsättningarna.

För att åtgärda detta fel, lägg helt enkelt till de ytterligare resultatuppsättningarna till WITH RESULT SETS sats, var och en separerad med ett kommatecken.

Du kan också fixa det genom att ta bort WITH RESULT SETS klausul, men jag antar att du använder den av en anledning (dvs. du måste omdefiniera resultatuppsättningen som returneras av proceduren).

Exempel på kod som orsakar felet

Anta att vi har en lagrad procedur som returnerar tre resultatuppsättningar.

EXEC sp_getCityStateCountryByCityId @CityId = 1;

Resultat:

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

Och säg att vi vill använda WITH RESULT SETS sats för att omdefiniera kolumnerna i endast den första resultatuppsättningen.

Om du gör det med följande kod uppstår ett fel.

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

Resultat:

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.

Detta beror på att vi inte inkluderade de andra resultatuppsättningarna i WITH RESULT SETS klausul.

Lösningen

Lösningen är att inkludera de andra resultatuppsättningarna i WITH RESULT SETS klausul.

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

Resultat:

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

Problemet har nu åtgärdats.


  1. Halloweenproblemet – del 3

  2. Hur CTE kan hjälpa till att skriva komplexa, kraftfulla frågor:ett prestationsperspektiv

  3. 11 sätt att hitta dubbletter av rader medan du ignorerar den primära nyckeln i SQLite

  4. Skapa ett Excel-kalkylblad från en Oracle-databas