Por que recebo “O procedimento espera o parâmetro '@statement' do tipo 'ntext / nchar / nvarchar'.” quando tento usar sp_executesql?


96

Por que recebo este erro

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

quando tento usar sp_executesql?


1
Como você está tentando executá-lo? Em T-SQL? De um programa? Você está passando o parâmetro "@statement" obrigatório?
Matt Hamilton

Respostas:


216

Parece que você está chamando sp_executesql com uma instrução VARCHAR, quando precisa ser NVARCHAR.

por exemplo, isso dará o erro porque @SQL precisa ser NVARCHAR

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

Assim:

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

Isso funciona, mas a outra resposta (de Daniel Renshaw) é MUITO mais útil, na maioria das vezes. (já que não precisa da declaração de variável inútil)
Brondahl

22

A solução é colocar um N na frente do tipo e da string SQL para indicar que é uma string de caracteres de byte duplo:

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

0

Eu havia perdido outro pequeno detalhe: esqueci os colchetes "(100)" atrás do NVARCHAR.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.