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?

Manoj Wadhwani
sumber
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
AdaTheDev
sumber
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
Daniel Renshaw
sumber
0

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

simaglei
sumber