0

我打电话时遇到了问题sp_executesql,我传递了 varchar 参数。
我收到了这个错误:

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

4

3 回答 3

1

心理调试器说您要么传递给SP_ExecuteSQLvarchar 类型的变量(使其成为 nvarchar),要么您有一个未使用 unicode 前缀的字符串:

例如

Exec sp_executesql 'select * from something'

要修复它,请使用:

Exec sp_executesql N'select * from something'

注意N字符串上的前缀。

于 2013-02-12T08:43:13.570 回答
0

这意味着 expect的@statement参数。sp_executesqlnvarchar

这并不意味着参数必须是 nvarchar。
当然,如果你没有参数,你为什么要使用sp_executesql呢?

CREATE TABLE #foo (bar varchar(100) NOT NULL);
DECLARE @filter varchar(100) = 'bob';
EXEC sys.sp_executesql
      N'SELECT * FROM #foo WHERE bar = @p1', --NVARCHAR because of N prefix
      N'@p1 varchar(100)', --NVARCHAR because of N prefix
      @filter --VARCHAR
DROP TABLE #foo
于 2013-02-12T08:42:32.353 回答
0

尝试这个 :

例如,这将给出错误,因为@SQL 需要是 NVARCHAR

下面给出错误:

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

所以:使用NVARCHAR(100)

DECLARE @SQL NVARCHAR(100)
SET @SQL = 'SELECT TOP 1 * FROM sys.tables'
EXECUTE sp_executesql @SQL
于 2013-02-12T08:43:06.560 回答