我正在尝试学习和使用sp_executesql
,即使使用这个简单的SQL语句,我也会遇到困难。
DECLARE @sql NVARCHAR(MAX) = NULL
DECLARE @WHERE NVARCHAR(MAX) = NULL
SET @sql = N'
SELECT
*
FROM
MyTable
@WHERE'
SET @WHERE = ISNULL(' WHERE ' + @WHERE, '');
EXECUTE sp_executesql
@statement = @sql
, @params = N'@WHERE nvarchar(MAX)'
, @WHERE = @WHERE;
我犯了这个错误,不明白为什么。。。
消息102,级别15,状态1,第6行
"@WHERE"附近的语法不正确。
不能将where子句作为参数。
我建议你阅读MVP Erland Sommarskog关于这个主题的文章的这一部分,以及整篇文章。
您可以在没有参数的情况下实现这一点,即使这不是一个好主意,也可以直接将附加到SQL字符串中
DECLARE @sql NVARCHAR(MAX) = NULL
DECLARE @WHERE NVARCHAR(MAX) = NULL
SET @sql = N'SELECT * FROM MyTable' + ISNULL(' WHERE ' + @WHERE, '');
EXECUTE sp_executesql @sql