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

Jak opravit „příkaz EXECUTE selhal, protože jeho klauzule WITH RESULT SETS specifikovala 2 sloupce pro sadu výsledků…“ Msg 11537 v SQL Server

Pokud narazíte na chybu Msg 11537, Level 16 na SQL Server, je pravděpodobné, že se pokoušíte spustit uloženou proceduru pomocí WITH RESULT SETS klauzule, ale nezahrnuli jste do své definice všechny sloupce.

Když použijete WITH RESULT SETS klauzule v EXECUTE /EXEC musíte zadat definici pro všechny sloupce vrácené uloženou procedurou. Pokud tak neučiníte, zobrazí se tato chyba.

Příklad

Následující uložená procedura vrátí tři sloupce.

EXEC sp_getCityById @CityId = 1;

Výsledek:

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

Nyní předpokládejme, že chceme předefinovat některé sloupce. Můžeme použít WITH RESULT SETS klauzule k tomu.

Kód problému

Pokud však do této klauzule nezahrneme všechny tři sloupce, dostaneme chybu.

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

Výsledek:

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.

Chybová zpráva nám říká, kolik sloupců jsme zadali a kolik jich bylo odesláno uloženou procedurou.

V tomto případě jsme zadali dva sloupce, ale procedura poslala tři.

Dobrý kód

Tento problém můžeme vyřešit zahrnutím třetího sloupce.

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

Výsledek:

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

  1. Oprava chyby 1064 (42000) při použití operátora MINUS v MariaDB

  2. SQL Server:Jak používat UNION se dvěma dotazy, které OBA mají klauzuli WHERE?

  3. NOT IN v postgresql nefunguje

  4. Chyba převodu dat hromadného načtení (neshoda typu nebo neplatný znak pro zadanou kódovou stránku) pro řádek 1, sloupec 4 (rok)