Tại sao tôi nhận được "Thủ tục mong đợi tham số '@statement' thuộc loại 'ntext / nchar / nvarchar'." khi tôi cố gắng sử dụng sp_executesql?


96

Tại sao tôi gặp lỗi này

Procedure expects parameter '@statement' of type 'ntext/nchar/nvarchar'.

khi tôi cố gắng sử dụng sp_executesql?


1
Bạn đang cố gắng thực hiện nó như thế nào? Trong T-SQL? Từ một chương trình? Bạn có đang chuyển tham số "@statement" bắt buộc không?
Matt Hamilton,

Câu trả lời:


216

Có vẻ như bạn đang gọi sp_executesql bằng câu lệnh VARCHAR, khi nó cần là NVARCHAR.

ví dụ: Điều này sẽ gây ra lỗi vì @SQL cần phải là NVARCHAR

DECLARE @SQL VARCHAR(100)
SET @SQL = 'SELECT TOP 1 * FROM sys.tables'
EXECUTE sp_executesql @SQL

Vì thế:

DECLARE @SQL NVARCHAR(100)
SET @SQL = 'SELECT TOP 1 * FROM sys.tables'
EXECUTE sp_executesql @SQL

Điều này không hiệu quả, nhưng câu trả lời khác (từ Daniel Renshaw) là CÁCH hữu ích hơn, hầu hết thời gian. (vì nó không cần khai báo biến vô nghĩa)
Brondahl

22

Giải pháp là đặt N ở phía trước của cả kiểu và chuỗi SQL để cho biết đó là một chuỗi ký tự byte kép:

DECLARE @SQL NVARCHAR(100) 
SET @SQL = N'SELECT TOP 1 * FROM sys.tables' 
EXECUTE sp_executesql @SQL

0

Tôi đã bỏ lỡ một chi tiết nhỏ khác: Tôi quên dấu ngoặc "(100)" đằng sau NVARCHAR.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.