【发布时间】:2018-06-01 14:02:51
【问题描述】:
DECLARE @str VARCHAR(MAX)=''
SET @str='
DECLARE @where VARCHAR(max)=''''
IF 1>2
BEGIN
SET @where='' Test_Group_Id=1''
END
ELSE
BEGIN
SET @where='' Party_Master_Id=1''
END
SELECT * FROM dbo.Party_Details WHERE 1=1 and @where';
EXECUTE(@str)
【问题讨论】:
-
寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码。跨度>
-
在尝试执行之前 PRINT
@str会看到什么? -
WHERE 1=1?重点是什么?这完全浪费了优化器的时间,应该被删除。除非你能想到1=1为假的时候? -
实际上,我认为您确实需要更好地解释这一点。你在
IF中的测试是IF 1 > 2,它总是错误的。因此,当您的查询总是SELECT * FROM dbo.Party_Details WHERE Party_Master_Id=1;时,为什么需要动态 SQL? -
我无法访问您在下面的 cmets 中引用的第三方 Oasis 站点 - 请在此处提供完整的复制。请参阅minimal reproducible example 和How to Ask 了解更多详情
标签: sql-server stored-procedures dynamic-sql