sql >> Databasteknik >  >> RDS >> Sqlserver

Hur man fixar "EXECUTE-satsen misslyckades eftersom dess WITH RESULT SETS-sats specificerade 2 kolumner för resultatuppsättningen..." Meddelande 11537 i SQL Server

Om du stöter på felmeddelande 11537, nivå 16 i SQL Server, är chansen stor att du försöker köra en lagrad procedur genom att använda WITH RESULT SETS klausul, men du har inte inkluderat alla kolumner i din definition.

När du använder WITH RESULT SETS sats i EXECUTE /EXEC måste du ge en definition för alla kolumner som returneras av den lagrade proceduren. Om du inte gör det får du det här felet.

Exempel

Följande lagrade procedur returnerar tre kolumner.

EXEC sp_getCityById @CityId = 1;

Resultat:

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

Anta nu att vi vill omdefiniera några av kolumnerna. Vi kan använda WITH RESULT SETS klausul för att göra det.

Problemkod

Men om vi inte inkluderar alla tre kolumnerna i den här klausulen får vi ett felmeddelande.

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

Resultat:

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.

Felmeddelandet talar om för oss hur många kolumner vi angav och hur många som skickades av den lagrade proceduren.

I det här fallet angav vi två kolumner men proceduren skickade tre.

Bra kod

Vi kan åtgärda det här problemet genom att inkludera den tredje kolumnen.

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

Resultat:

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

  1. Skriver till MySQL-databas med pandor med SQLAlchemy, to_sql

  2. String_agg för SQL Server före 2017

  3. Förstå PostgreSQL-frågeprestanda

  4. Ordna om/återställ automatisk inkrementering av primärnyckeln