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?


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

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

0

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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.