【问题标题】:How to append an extra AND statement to a WHERE clause based on a condition?如何根据条件将额外的 AND 语句附加到 WHERE 子句?
【发布时间】:2021-07-22 05:25:21
【问题描述】:

我有一个要从多个表中选择的 sql 查询。我也在创建一个基于 Ids 变量的临时表

 IF @IDs IS NOT NULL   
 BEGIN   
    CREATE TABLE #TempTable(id nvarchar(12))       
    INSERT #TempTable (id)    
    SELECT x.value    
    FROM string_split(@IDs, ',') x      
END 

在此之后,我根据多个条件进行选择。

WHERE m.l_var = @l_var
AND m.o_var = @o_var
AND tvar BETWEEN @Start AND @End
AND m.id in (SELECT id FROM #TempTable)

IF OBJECT_ID('tempdb..#TempTable') IS NOT NULL
   DROP TABLE #TempTable

如何将最后一个 AND 语句写入可以检查 @IDs 是否为空的位置,就像创建表时一样?

供参考,这是我想要的逻辑,但不知道怎么写正确:

WHERE ....
AND ...
AND..
AND IF NOT NULL @IDs m.id in (SELECT id FROM #TempTable)
    OR ELSE DON'T APPEND

【问题讨论】:

  • and @IDs is null or m.id in (SELECT id FROM #TempTable) ?
  • 您使用的是哪个 dbms? (上面的代码是特定于产品的。)
  • @jarlh Sql 服务器管理工​​作室
  • @TheImpaler 我会试试的。
  • @PatrickS SSMS 纯粹是一个客户端 UI,它不是数据库引擎,您使用的是 SQL Server 并且想要 select @@version 的版本。

标签: sql sql-server tsql


【解决方案1】:

逻辑如下:

WHERE .... AND
      . . .AND ..
      (@IDs IS NULL OR m.id in (SELECT t.id FROM #TempTable t))

我不确定您为什么要使用临时表。我可能会建议:

WHERE .... AND
      . . .AND ..
      (@IDs IS NULL OR m.id in (SELECT s.value FROM string_split(@IDs, ',') s)

【讨论】:

    猜你喜欢
    • 2016-11-25
    • 2013-12-23
    • 2011-10-22
    • 2023-04-01
    • 2017-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-10
    相关资源
    最近更新 更多