Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Cách khắc phục “Câu lệnh EXECUTE không thành công vì mệnh đề WITH RESULT SETS của nó đã chỉ định 1 (các) tập kết quả…” trong SQL Server

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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bảo trì cơ sở dữ liệu hệ thống máy chủ SQL

  2. Đổi tên cột SQL Server 2008

  3. xác định bộ ký tự của một bảng / cơ sở dữ liệu?

  4. Bảng tổng hợp SQL Server với nhiều cột tổng hợp

  5. Mọi khóa ngoại của SQL Server có nên có một chỉ mục phù hợp không?