Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Cara Memperbaiki "Pernyataan EXECUTE gagal karena klausa WITH RESULT SETS nya ditentukan 1 set hasil ..." di SQL Server

Jika Anda menemukan kesalahan Msg 11535, Level 16 saat mencoba menjalankan prosedur tersimpan, itu karena Anda tidak menentukan set hasil yang cukup di WITH RESULT SETS klausa.

Beberapa prosedur tersimpan mengembalikan beberapa set hasil. Saat menggunakan WITH RESULT SETS klausa, Anda perlu menentukan setiap set hasil yang diharapkan. Anda perlu melakukan ini bahkan jika Anda hanya ingin mengubah definisi dari satu atau beberapa set hasil.

Untuk memperbaiki kesalahan ini, cukup tambahkan kumpulan hasil tambahan ke WITH RESULT SETS klausa, masing-masing dipisahkan dengan koma.

Anda juga dapat memperbaikinya dengan menghapus WITH RESULT SETS klausa, tetapi saya akan menganggap Anda menggunakannya karena suatu alasan (yaitu Anda perlu mendefinisikan ulang kumpulan hasil yang dikembalikan oleh prosedur).

Contoh Kode yang Menyebabkan Kesalahan

Misalkan kita memiliki prosedur tersimpan yang mengembalikan tiga set hasil.

EXEC sp_getCityStateCountryByCityId @CityId = 1;

Hasil:

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

Dan katakan kita ingin menggunakan WITH RESULT SETS klausa untuk mendefinisikan ulang kolom hanya set hasil pertama.

Melakukannya dengan kode berikut akan menghasilkan kesalahan.

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

Hasil:

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.

Ini karena kami tidak menyertakan kumpulan hasil lainnya di WITH RESULT SETS klausa.

Solusinya

Solusinya adalah dengan menyertakan kumpulan hasil lainnya di WITH RESULT SETS klausa.

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

Hasil:

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

Masalahnya sekarang telah diperbaiki.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara mengganti nilai (null) dengan 0 output di PIVOT

  2. Bagaimana cara menggunakan GROUP BY untuk menggabungkan string di SQL Server?

  3. Alternatif SQL Server Management Studio untuk menelusuri/mengedit tabel dan menjalankan kueri

  4. Tidak dapat masuk ke SQL Server + Otentikasi SQL Server + Kesalahan:18456

  5. Oracle:apakah ada alat untuk melacak kueri, seperti Profiler untuk server sql?