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

Bagaimana Memperbaiki "Pernyataan EXECUTE gagal karena dengan klausa WITH RESULT SETS ditentukan 2 kolom untuk kumpulan hasil ..." Msg 11537 di SQL Server

Jika Anda mengalami kesalahan Msg 11537, Level 16 di SQL Server, kemungkinan besar Anda mencoba menjalankan prosedur tersimpan dengan menggunakan WITH RESULT SETS klausa, tetapi Anda belum menyertakan semua kolom dalam definisi Anda.

Saat Anda menggunakan WITH RESULT SETS klausa dalam EXECUTE /EXEC pernyataan, Anda harus memberikan definisi untuk semua kolom yang dikembalikan oleh prosedur tersimpan. Jika tidak, Anda akan mendapatkan kesalahan ini.

Contoh

Prosedur tersimpan berikut mengembalikan tiga kolom.

EXEC sp_getCityById @CityId = 1;

Hasil:

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

Sekarang, misalkan kita ingin mendefinisikan ulang beberapa kolom. Kita dapat menggunakan WITH RESULT SETS klausa untuk melakukan itu.

Kode Masalah

Tetapi jika kita tidak menyertakan ketiga kolom dalam klausa ini, kita akan mendapatkan kesalahan.

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

Hasil:

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.

Pesan kesalahan memberitahu kita berapa banyak kolom yang kita tentukan, dan berapa banyak yang dikirim oleh prosedur tersimpan.

Dalam hal ini, kami menetapkan dua kolom tetapi prosedur mengirim tiga.

Kode Bagus

Kami dapat memperbaiki masalah ini dengan memasukkan kolom ketiga.

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

Hasil:

------------+--------------+--------------+
| 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. Mengapa menggunakan Pilih 100 Persen Teratas?

  2. Dapatkan ukuran semua tabel di database

  3. Mengapa pilih SCOPE_IDENTITY() mengembalikan desimal alih-alih bilangan bulat?

  4. Cara melewatkan array ke prosedur tersimpan SQL Server

  5. Cara Memperbaiki "Server tidak dikonfigurasi untuk AKSES DATA" di SQL Server