Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как да коригирате „Изразът EXECUTE не бе успешен, защото неговата клауза WITH RESULT SETS посочи 2 колона(и) за набор от резултати...“ Msg 11537 в SQL Server

Ако срещнете грешка Msg 11537, ниво 16 в SQL Server, има вероятност да се опитвате да изпълните съхранена процедура с помощта на WITH RESULT SETS клауза, но не сте включили всички колони във вашата дефиниция.

Когато използвате WITH RESULT SETS клауза в EXECUTE /EXEC оператор, трябва да предоставите дефиниция за всички колони, върнати от съхранената процедура. Ако не го направите, ще получите тази грешка.

Пример

Следната съхранена процедура връща три колони.

EXEC sp_getCityById @CityId = 1;

Резултат:

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

Да предположим, че искаме да предефинираме някои от колоните. Можем да използваме WITH RESULT SETS клауза за това.

Код на проблема

Но ако не включим и трите колони в тази клауза, ще получим грешка.

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

Резултат:

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.

Съобщението за грешка ни казва колко колони сме посочили и колко са изпратени от съхранената процедура.

В този случай посочихме две колони, но процедурата изпрати три.

Добър код

Можем да решим този проблем, като включим третата колона.

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

Резултат:

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

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Одит на данни в NHibernate и SqlServer

  2. Елементите ORDER BY трябва да се появят в списъка за избор, ако е посочено SELECT DISTINCT

  3. Поправете „Грешка при аритметично препълване при преобразуване на int в числови тип данни“ в SQL Server

  4. Връщане на номера на дял за всеки ред при запитване на разделена таблица в SQL Server (T-SQL)

  5. Преобразувайте текста на текстовото поле в цяло число