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 2 cột cho tập kết quả…” Msg 11537 trong SQL Server

Nếu bạn gặp phải lỗi Msg 11537, Mức 16 trong SQL Server, rất có thể bạn đang cố gắng thực thi một quy trình được lưu trữ bằng cách sử dụng WITH RESULT SETS nhưng bạn chưa bao gồm tất cả các cột trong định nghĩa của mình.

Khi bạn sử dụng WITH RESULT SETS mệnh đề trong EXECUTE / EXEC , bạn phải cung cấp định nghĩa cho tất cả các cột được trả về bởi thủ tục được lưu trữ. Nếu không, bạn sẽ gặp lỗi này.

Ví dụ

Thủ tục được lưu trữ sau đây trả về ba cột.

EXEC sp_getCityById @CityId = 1;

Kết quả:

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

Bây giờ, giả sử chúng ta muốn xác định lại một số cột. Chúng ta có thể sử dụng WITH RESULT SETS mệnh đề để làm điều đó.

Mã sự cố

Nhưng nếu chúng tôi không bao gồm tất cả ba cột trong điều khoản này, chúng tôi sẽ gặp lỗi.

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

Kết quả:

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.

Thông báo lỗi cho chúng tôi biết có bao nhiêu cột mà chúng tôi đã chỉ định và bao nhiêu cột đã được gửi bởi thủ tục được lưu trữ.

Trong trường hợp này, chúng tôi chỉ định hai cột nhưng thủ tục gửi ba cột.

Mã tốt

Chúng tôi có thể khắc phục sự cố này bằng cách bao gồm cột thứ ba.

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

Kết quả:

------------+--------------+--------------+
| 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. Truy vấn để chỉ lấy số từ một chuỗi

  2. Máy chủ thích ứng không khả dụng hoặc không tồn tại lỗi kết nối với SQL Server từ PHP

  3. Cách giao dịch ngầm hoạt động trong SQL Server

  4. Thực thi sp_reset_connection có nghĩa là gì trong Sql Server Profiler?

  5. Chọn câu lệnh để trả về cha mẹ và con vô hạn