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