Perché viene visualizzato il messaggio "La procedura prevede il parametro" @statement "di tipo" ntext / nchar / nvarchar "." quando provo a utilizzare sp_executesql?


96

Perché ricevo questo errore

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

quando provo a utilizzare sp_executesql?


1
Come stai cercando di eseguirlo? In T-SQL? Da un programma? Stai passando il parametro "@statement" richiesto?
Matt Hamilton

Risposte:


216

Sembra che tu stia chiamando sp_executesql con un'istruzione VARCHAR, quando deve essere NVARCHAR.

ad esempio, questo darà l'errore perché @SQL deve essere NVARCHAR

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

Così:

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

Funziona, ma l'altra risposta (di Daniel Renshaw) è MOLTO più utile, la maggior parte delle volte. (poiché non necessita della dichiarazione di variabile inutile)
Brondahl

22

La soluzione è mettere una N davanti sia al tipo che alla stringa SQL per indicare che si tratta di una stringa di caratteri a doppio byte:

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

0

Mi ero perso un altro piccolo dettaglio: ho dimenticato le parentesi "(100)" dietro NVARCHAR.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.