Nếu bạn gặp phải lỗi Msg 11535, Mức 16 trong khi cố gắng thực thi một quy trình được lưu trữ, thì đó là do bạn không xác định đủ bộ kết quả trong WITH RESULT SETS
mệnh đề.
Một số thủ tục được lưu trữ trả về nhiều tập kết quả. Khi sử dụng WITH RESULT SETS
, bạn cần xác định từng tập kết quả mong đợi. Bạn cần làm điều này ngay cả khi bạn chỉ muốn thay đổi định nghĩa của một hoặc một số tập kết quả.
Để khắc phục lỗi này, chỉ cần thêm bộ kết quả bổ sung vào WITH RESULT SETS
mỗi mệnh đề được phân tách bằng dấu phẩy.
Bạn cũng có thể sửa nó bằng cách xóa WITH RESULT SETS
nhưng tôi sẽ cho rằng bạn đang sử dụng nó vì một lý do (tức là bạn cần xác định lại tập kết quả được trả về bởi quy trình).
Ví dụ về mã gây ra lỗi
Giả sử chúng ta có một thủ tục được lưu trữ trả về ba tập kết quả.
EXEC sp_getCityStateCountryByCityId @CityId = 1;
Kết quả:
+------------+----------------------------+-----------------------------+ | 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)
Và giả sử chúng tôi muốn sử dụng WITH RESULT SETS
mệnh đề để xác định lại các cột của chỉ tập kết quả đầu tiên.
Làm điều đó với đoạn mã sau sẽ tạo ra lỗi.
EXEC sp_getCityStateCountryByCityId @CityId = 1
WITH RESULT SETS
(
(
[City] nvarchar(50),
[Population] int,
[Valid From] date
)
);
Kết quả:
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.
Điều này là do chúng tôi không bao gồm các tập hợp kết quả khác trong WITH RESULT SETS
mệnh đề.
Giải pháp
Giải pháp là đưa các bộ kết quả khác vào WITH RESULT SETS
mệnh đề.
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
)
);
Kết quả:
+------------+--------------+--------------+ | 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)
Sự cố hiện đã được khắc phục.