每当我尝试在varchar
中使用sp_executesql
时,它总会抛出以下错误:
过程需要参数'@statement'的类型 'NTEXT / NCHAR / nvarchar的'
我们应该使用nvarchar
吗?
如果“exec”允许我们使用varchar,为什么不使用sp_executesql?
示例代码:
DECLARE @IntVariable int;
DECLARE @SQLString **varchar**(500);--**we need to use nvarchar!! but why?**
DECLARE @ParmDefinition nvarchar(500);
SET @SQLString =
'SELECT nationalidnumber, NationalIDNumber, Title, LoginID
FROM AdventureWorks.HumanResources.Employee
WHERE nationalidnumber = @BusinessEntityID';
SET @ParmDefinition = '@BusinessEntityID int';
SET @IntVariable = 14417807;
EXECUTE sp_executesql @SQLString, @ParmDefinition,
@BusinessEntityID = @IntVariable;
SET @IntVariable = 109;
EXECUTE sp_executesql @SQLString, @ParmDefinition,
@BusinessEntityID = @IntVariable;
答案 0 :(得分:0)
执行
在a中执行命令字符串或字符串 Transact-SQL批处理
<强> @string_variable 强>
是局部变量的名称。 @string_variable可以是任何 char , varchar , nchar 或 nvarchar 数据类型。这些包括(最大)数据
<强>类型。 [N]'tsql_string'
是一个常量字符串。 tsql_string可以是任何 nvarchar 或 varchar 数据类型。如果包含N,则将字符串解释为nvarchar 数据类型。
sp_executesql
[@stmt =]声明
是包含Transact-SQL语句或批处理
的Unicode字符串
因此它需要设计中的变量(如@marc_s所说)。正如@MattGibson评论的那样,使用Unicode是一种现代的做法。
nvarchar [(n | max)]
可变长度 Unicode 字符串数据。
varchar [(n | max)]
可变长度,非Unicode 字符串数据。
在这里,您可以详细了解varchar
和nvarchar
之间的区别:
What is the difference between varchar and nvarchar?