¿Por qué obtengo "El procedimiento espera el parámetro '@statement' de tipo 'ntext / nchar / nvarchar'". cuando intento usar sp_executesql?

96

¿Por qué recibo este error?

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

cuando intento usar sp_executesql?

Manoj Wadhwani
fuente
1
¿Cómo intentas ejecutarlo? ¿En T-SQL? ¿De un programa? ¿Estás pasando el parámetro "@statement" obligatorio?
Matt Hamilton

Respuestas:

216

Parece que está llamando a sp_executesql con una declaración VARCHAR, cuando necesita ser NVARCHAR.

por ejemplo, esto dará el error porque @SQL necesita ser NVARCHAR

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

Entonces:

DECLARE @SQL NVARCHAR(100)
SET @SQL = 'SELECT TOP 1 * FROM sys.tables'
EXECUTE sp_executesql @SQL
AdaTheDev
fuente
Esto funciona, pero la otra respuesta (de Daniel Renshaw) es MUCHO más útil, la mayor parte del tiempo. (ya que no necesita la declaración de variable inútil)
Brondahl
22

La solución es poner una N delante del tipo y de la cadena SQL para indicar que es una cadena de caracteres de doble byte:

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

Me había perdido otro pequeño detalle: olvidé los corchetes "(100)" detrás de NVARCHAR.

simaglei
fuente