Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak naprawić „wyrażenie EXECUTE nie powiodło się, ponieważ jego klauzula WITH RESULT SETS określiła 1 zestaw wyników…” w programie SQL Server

Jeśli podczas próby wykonania procedury składowanej wystąpi błąd Msg 11535, poziom 16, oznacza to, że nie zdefiniowano wystarczającej liczby zestawów wyników w WITH RESULT SETS klauzula.

Niektóre procedury składowane zwracają wiele zestawów wyników. Podczas korzystania z WITH RESULT SETS klauzula, musisz zdefiniować każdy oczekiwany zestaw wyników. Musisz to zrobić, nawet jeśli chcesz zmienić tylko definicję jednego lub kilku zestawów wyników.

Aby naprawić ten błąd, po prostu dodaj dodatkowe zestawy wyników do WITH RESULT SETS klauzula, każda oddzielona przecinkiem.

Możesz to również naprawić, usuwając WITH RESULT SETS klauzuli, ale zakładam, że używasz jej z jakiegoś powodu (tj. musisz przedefiniować zestaw wyników zwracany przez procedurę).

Przykład kodu, który powoduje błąd

Załóżmy, że mamy procedurę składowaną, która zwraca trzy zestawy wyników.

EXEC sp_getCityStateCountryByCityId @CityId = 1;

Wynik:

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

I powiedzmy, że chcemy użyć WITH RESULT SETS klauzula, aby ponownie zdefiniować kolumny tylko pierwszego zestawu wyników.

Wykonanie tego za pomocą poniższego kodu spowoduje błąd.

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

Wynik:

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.

Dzieje się tak, ponieważ nie uwzględniliśmy innych zestawów wyników w WITH RESULT SETS klauzula.

Rozwiązanie

Rozwiązaniem jest uwzględnienie innych zestawów wyników w WITH RESULT SETS klauzula.

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

Wynik:

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

Problem został rozwiązany.


  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 MAX wielu kolumn?

  2. Jak używać parametru z LIKE w Sql Server Compact Edition

  3. Kod Entity-framework działa wolno przy wielokrotnym użyciu funkcji Include()

  4. Sformatuj numer telefonu w programie SQL Server (T-SQL)

  5. Tworzenie niestandardowego obrazu dockera SQL Server na oficjalnym obrazie