Mengapa saya mendapatkan "Prosedur mengharapkan parameter '@statement' dengan tipe 'ntext / nchar / nvarchar'.” ketika saya mencoba menggunakan sp_executesql?


96

Mengapa saya mendapatkan kesalahan ini

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

ketika saya mencoba menggunakan sp_executesql?


1
Bagaimana Anda mencoba menjalankannya? Di T-SQL? Dari sebuah program? Apakah Anda meneruskan parameter "@statement" yang diperlukan?
Matt Hamilton

Jawaban:


217

Kedengarannya seperti Anda memanggil sp_executesql dengan pernyataan VARCHAR, jika itu membutuhkan NVARCHAR.

misalnya Ini akan memberikan kesalahan karena @SQL harus NVARCHAR

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

Begitu:

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

Ini berhasil, tetapi jawaban lain (dari Daniel Renshaw) JAUH lebih berguna, sebagian besar waktu. (karena tidak memerlukan deklarasi variabel tak berguna)
Brondahl

22

Solusinya adalah dengan meletakkan N di depan tipe dan string SQL untuk menunjukkan itu adalah string karakter byte ganda:

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

0

Saya telah melewatkan detail kecil lainnya: Saya lupa tanda kurung "(100)" di belakang NVARCHAR.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.