Chaque fois que j'essaie d'utiliser varchar
dans sp_executesql
, l'erreur suivante se produit toujours:
La procédure attend le paramètre '@statement' de type 'ntext / nchar / nvarchar'
Y a-t-il une raison pour laquelle nous devrions utiliser nvarchar
?
Si "exec" nous permet d'utiliser varchar, pourquoi pas sp_executesql?
Exemple de code:
DECLARE @IntVariable int; DECLARE @SQLSsortingng **varchar**(500);--**we need to use nvarchar!! but why?** DECLARE @ParmDefinition nvarchar(500); SET @SQLSsortingng = 'SELECT nationalidnumber, NationalIDNumber, Title, LoginID FROM AdventureWorks.HumanResources.Employee WHERE nationalidnumber = @BusinessEntityID'; SET @ParmDefinition = '@BusinessEntityID int'; SET @IntVariable = 14417807; EXECUTE sp_executesql @SQLSsortingng, @ParmDefinition, @BusinessEntityID = @IntVariable; SET @IntVariable = 109; EXECUTE sp_executesql @SQLSsortingng, @ParmDefinition, @BusinessEntityID = @IntVariable;
Msdn0
EXÉCUTER
Exécute une string de command ou une string de caractères dans un lot Transact-SQL
@ssortingng_variable
Est le nom d'une variable locale. @ssortingng_variable peut être n'importe quel type de données char , varchar , nchar ou nvarchar . Ceux-ci incluent datatables (max)
les types. [N] 'tsql_ssortingng'
Est une string constante. tsql_ssortingng peut être n'importe quel type de données nvarchar ou varchar . Si le N est inclus, la string est interprétée comme un type de données nvarchar.
Msdn1
sp_executesql
[@stmt =] instruction
Chaîne Unicode contenant une instruction Transact-SQL ou un lot
Donc, il a besoin de variables dans Unicode par design (comme dit @marc_s). Et comme l'a commenté @MattGibson, l'utilisation d'Unicode est une pratique moderne.
Msdn2
nvarchar [(n | max)]
Données de string Unicode de longueur variable.
Msdn3
varchar [(n | max)]
Données de string de longueur variable, non-Unicode .
Et ici, vous pouvez en savoir plus sur la différence entre varchar
et nvarchar
: Quelle est la différence entre varchar et nvarchar?