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.