96

为什么我会收到此错误

过程需要类型为“ntext/nchar/nvarchar”的参数“@statement”。

当我尝试使用sp_executesql

4

3 回答 3

220

听起来您正在使用 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
于 2010-04-30T10:47:11.330 回答
23

解决方法是在类型和 SQL 字符串前面都放一个 N,表示它是双字节字符串:

DECLARE @SQL NVARCHAR(100) 
SET @SQL = N'SELECT TOP 1 * FROM sys.tables' 
EXECUTE sp_executesql @SQL
于 2010-04-30T10:51:23.237 回答
0

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

于 2020-02-14T09:03:27.487 回答