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.