sql >> Databáze >  >> RDS >> Sqlserver

Jak opravit „příkaz EXECUTE selhal, protože jeho klauzule WITH RESULT SETS specifikovala 1 sadu výsledků…“ na serveru SQL Server

Pokud při pokusu o provedení uložené procedury narazíte na chybu Msg 11535, Level 16, je to proto, že jste nedefinovali dostatek sad výsledků v WITH RESULT SETS doložka.

Některé uložené procedury vracejí více sad výsledků. Při použití WITH RESULT SETS klauzule, musíte definovat každou očekávanou sadu výsledků. Musíte to udělat, i když chcete změnit pouze definici jedné nebo některých sad výsledků.

Chcete-li tuto chybu opravit, jednoduše přidejte další sady výsledků do WITH RESULT SETS klauzule, každá oddělená čárkou.

Můžete to také opravit odstraněním WITH RESULT SETS klauzuli, ale předpokládám, že ji používáte z nějakého důvodu (tj. musíte předefinovat sadu výsledků vrácenou procedurou).

Příklad kódu, který způsobuje chybu

Předpokládejme, že máme uloženou proceduru, která vrací tři sady výsledků.

EXEC sp_getCityStateCountryByCityId @CityId = 1;

Výsledek:

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

A řekněme, že chceme použít WITH RESULT SETS klauzule k předefinování sloupců pouze první sady výsledků.

Pokud to uděláte s následujícím kódem, dojde k chybě.

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

Výsledek:

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.

Je to proto, že jsme do WITH RESULT SETS nezahrnuli ostatní sady výsledků doložka.

Řešení

Řešením je zahrnout ostatní sady výsledků do WITH RESULT SETS doložka.

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

Výsledek:

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

Problém je nyní vyřešen.


  1. Jak odstranit sloupec v tabulce

  2. Jak odebrat primární klíč v SQL

  3. Mýty o výkonu:Proměnné tabulky jsou vždy v paměti

  4. Jaký je ekvivalent varchar(max) v Oracle?