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


Answers:


216

听起来好像您要使用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

这确实有效,但是在大多数情况下,其他答案(来自Daniel Renshaw)更有用。(因为它不需要毫无意义的变量声明)
Brondahl

22

解决方案是在类型和SQL字符串的前面放置N,以指示它是双字节字符串:

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

0

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.