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

问题描述:

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

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

+1

你是如何执行它的?在T-SQL中?从一个程序?你是否传递了所需的“@statement”参数? – 2010-04-30 10:45:01

听起来就像你用VARCHAR语句调用sp_executesql,当它需要是NVARCHAR时。

例如这将给错误,因为@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 
+0

这个解释对我来说是完美的,并解决了我的问题。谢谢! – natur3 2015-04-21 17:56:11

+0

谢谢!帮了很多! – cangosta 2015-10-02 11:20:48

+0

不错的男人。他在工作 – 2016-11-17 12:10:36

解决的办法是把一个N两个他类型前面和SQL字符串来表示它是双字节字符串:

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

这不是这里的解决方案 - 这仍然会出错,因为你有它。解决方案是将VARCHAR变量更改为NVARCHAR – AdaTheDev 2010-04-30 10:54:35

+0

AdaTheDev,你是对的,我已经修复了现在 – 2010-04-30 11:10:02