为什么我得到“过程期望'ntext / nchar / nvarchar'类型的参数'@statement'。”当我尝试使用sp_executesql?

时间:2010-04-30 10:41:42

标签: sql sql-server tsql dynamic-sql

为什么我会收到此错误

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

当我尝试使用sp_executesql时?

3 个答案:

答案 0 :(得分:194)

听起来你正在使用VARCHAR语句调用sp_executesql,当它需要是NVARCHAR时。

e.g。这将产生错误,因为@SQL需要是NVARCHAR

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

所以:

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

答案 1 :(得分:18)

解决方案是在他输入和SQL字符串前加一个N来表示它是一个双字节字符串:

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

答案 2 :(得分:0)

我错过了另一个小细节:我忘记了NVARCHAR后面的方括号“((100))”。