Warum erhalte ich "Prozedur erwartet Parameter '@statement' vom Typ 'ntext / nchar / nvarchar'." Wenn ich versuche, sp_executesql zu verwenden?

96

Warum bekomme ich diesen Fehler?

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

Wenn ich versuche, sp_executesql zu verwenden?

Manoj Wadhwani
quelle
1
Wie versuchen Sie es auszuführen? In T-SQL? Aus einem Programm? Übergeben Sie den erforderlichen Parameter "@statement"?
Matt Hamilton

Antworten:

216

Klingt so, als würden Sie sp_executesql mit einer VARCHAR-Anweisung aufrufen, wenn es NVARCHAR sein muss.

Beispiel: Dies gibt den Fehler aus, da @SQL NVARCHAR sein muss

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

So:

DECLARE @SQL NVARCHAR(100)
SET @SQL = 'SELECT TOP 1 * FROM sys.tables'
EXECUTE sp_executesql @SQL
AdaTheDev
quelle
Das funktioniert, aber die andere Antwort (von Daniel Renshaw) ist meistens viel nützlicher. (da es die sinnlose Variablendeklaration nicht benötigt)
Brondahl
22

Die Lösung besteht darin, ein N vor den Typ und die SQL-Zeichenfolge zu setzen, um anzuzeigen, dass es sich um eine Doppelbyte-Zeichenfolge handelt:

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

Ich hatte ein weiteres kleines Detail übersehen: Ich habe die Klammern "(100)" hinter NVARCHAR vergessen.

simaglei
quelle