当我尝试使用sp_executesql时,为什么会得到“Procedure expectpects parameter”@statement“types为”ntext / nchar / nvarchar“。

为什么我得到这个错误

Procedure expects parameter '@statement' of type 'ntext/nchar/nvarchar'. 

当我尝试使用sp_executesql?

听起来就像你用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 

解决的方法是在types和SQLstring之前放一个N来表示它是一个双字节string:

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