我正在尝试学习和使用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;
我收到此错误,无法弄清楚原因......
Msg 102,Level 15,State 1,Line 6
'@WHERE'附近的语法不正确。
答案 0 :(得分:3)
您不能将where子句作为参数。
我建议你阅读MVP Erland Sommarskog关于这个主题的文章的this部分,以及整篇文章。
通过直接附加到SQL字符串,您可以在没有参数的情况下完成此工作,即使这不是一个好主意:
DECLARE @sql NVARCHAR(MAX) = NULL
DECLARE @WHERE NVARCHAR(MAX) = NULL
SET @sql = N'SELECT * FROM MyTable' + ISNULL(' WHERE ' + @WHERE, '');
EXECUTE sp_executesql @sql