Pourquoi est-ce que j'obtiens «La procédure attend le paramètre '@statement' de type 'ntext / nchar / nvarchar'.» quand j'essaye d'utiliser sp_executesql?


96

Pourquoi ai-je cette erreur

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

quand j'essaye d'utiliser sp_executesql?


1
Comment essayez-vous de l'exécuter? Dans T-SQL? D'un programme? Passez-vous le paramètre obligatoire "@statement"?
Matt Hamilton

Réponses:


216

On dirait que vous appelez sp_executesql avec une instruction VARCHAR, alors qu'il doit s'agir de 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

Cela fonctionne, mais l'autre réponse (de Daniel Renshaw) est BEAUCOUP plus utile, la plupart du temps. (puisqu'il n'a pas besoin de la déclaration de variable inutile)
Brondahl

22

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

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

0

J'avais manqué un autre petit détail: j'ai oublié les crochets "(100)" derrière NVARCHAR.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.