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

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

Ако срещнете грешка Msg 11535, ниво 16, докато се опитвате да изпълните съхранена процедура, това е защото не сте дефинирали достатъчно набори от резултати в WITH RESULT SETS клауза.

Някои съхранени процедури връщат множество набори от резултати. Когато използвате WITH RESULT SETS клауза, трябва да дефинирате всеки очакван набор от резултати. Трябва да направите това, дори ако искате да промените само определението на един или някои от наборите от резултати.

За да коригирате тази грешка, просто добавете допълнителните набори от резултати към WITH RESULT SETS клауза, всяка отделена със запетая.

Можете също да го поправите, като премахнете WITH RESULT SETS клауза, но предполагам, че го използвате по някаква причина (т.е. трябва да предефинирате резултатния набор, върнат от процедурата).

Пример за код, който причинява грешката

Да предположим, че имаме съхранена процедура, която връща три набора резултати.

EXEC sp_getCityStateCountryByCityId @CityId = 1;

Резултат:

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

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

Ако го направите със следния код, това ще доведе до грешка.

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

Резултат:

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.

Това е така, защото не включихме другите набори от резултати в WITH RESULT SETS клауза.

Решението

Решението е да включите другите набори от резултати в WITH RESULT SETS клауза.

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

Резултат:

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

Проблемът вече е отстранен.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Вземете списък с пощенски акаунти в базата данни в SQL Server (T-SQL)

  2. Как да намерите името на ограничение в SQL Server

  3. Премахване на запомнения списък с данни за вход и пароли в SQL Server Management Studio

  4. Как да използвате RANK() в SQL Server

  5. Използвайте sys.trigger_event_types, за да изброите типовете тригерни събития в SQL Server