web-dev-qa-db-fra.com

Pourquoi est-ce que je reçois "La procédure attend le paramètre" @ déclaration "de type" ntext / nchar / nvarchar "." quand j'essaie d'utiliser sp_executesql?

Pourquoi ai-je cette erreur

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

quand j'essaie d'utiliser sp_executesql?

86
Manoj Wadhwani

On dirait que vous appelez sp_executesql avec une instruction VARCHAR, alors que cela doit être NVARCHAR.

par exemple. Cela donnera l'erreur car @SQL doit être NVARCHAR.

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

Alors:

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

La solution consiste à mettre un N devant le type et la chaîne SQL pour indiquer qu'il s'agit d'une chaîne de caractères codée sur deux octets:

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