¿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?


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

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

0

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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.