我打电话时遇到了问题sp_executesql
,我传递了 varchar 参数。
我收到了这个错误:
过程需要类型为“ntext/nchar/nvarchar”的参数“@statement”。
我打电话时遇到了问题sp_executesql
,我传递了 varchar 参数。
我收到了这个错误:
过程需要类型为“ntext/nchar/nvarchar”的参数“@statement”。
心理调试器说您要么传递给SP_ExecuteSQL
varchar 类型的变量(使其成为 nvarchar),要么您有一个未使用 unicode 前缀的字符串:
例如
Exec sp_executesql 'select * from something'
要修复它,请使用:
Exec sp_executesql N'select * from something'
注意N
字符串上的前缀。
这意味着 expect的@statement
参数。sp_executesql
nvarchar
这并不意味着您的参数必须是 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
尝试这个 :
例如,这将给出错误,因为@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