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

Man*_*ani 90 sql t-sql sql-server dynamic-sql

为什么我会收到此错误

Procedure expects parameter '@statement' of type 'ntext/nchar/nvarchar'.
Run Code Online (Sandbox Code Playgroud)

当我尝试使用sp_executesql?

Ada*_*Dev 208

听起来像是在使用VARCHAR语句调用sp_executesql时,它需要是NVARCHAR.

例如,这会产生错误,因为@SQL需要是NVARCHAR

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

所以:

DECLARE @SQL NVARCHAR(100)
SET @SQL = 'SELECT TOP 1 * FROM sys.tables'
EXECUTE sp_executesql @SQL
Run Code Online (Sandbox Code Playgroud)


Dan*_*haw 22

解决方案是在其类型和SQL字符串前加一个N来表示它是一个双字节字符串:

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