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