【问题标题】:How to use an evaluated expression in SQL IN clause如何在 SQL IN 子句中使用求值表达式
【发布时间】:2018-09-25 16:10:29
【问题描述】:

我有一个应用程序,它采用逗号分隔的字符串来表示要在 SQL 查询的“IN”子句中使用的多个 ID。

    SELECT * FROM TABLE WHERE [TABLENAME].[COLUMNNAME] 
    IN 
    ((SELECT '''' + REPLACE('PARAM(0, Enter ID/IDS. Separate multiple ids by 
    comma., String)', char(44), ''',''') + ''''))

我已经测试过 PARAM 获取输入的字符串,例如'ID1, ID2' 但 SELECT/REPLACE 不执行。声明变成了,

    SELECT * FROM TABLE WHERE [TABLENAME].[COLUMNNAME] 
    IN 
    ((SELECT '''' + REPLACE('ID1,ID2', char(44), ''',''') + ''''))

我正在努力实现,

    SELECT * FROM TABLE WHERE [TABLENAME].[COLUMNNAME] 
    IN ('ID1', 'ID2')

查询不返回任何结果/错误。我确信相应的记录在我正在使用的数据库中。不知道如何解决这个问题。

【问题讨论】:

    标签: sql-server tsql in-clause


    【解决方案1】:

    你不能这样做。 IN 运算符需要一个以逗号分隔的参数列表,但您为其提供了一个恰好包含逗号分隔字符串的参数:

    如果您使用的是 SQL Server 2016 或更高版本,则可以使用内置的string_split 将分隔字符串转换为表格。

    SELECT * 
    FROM TABLE 
    WHERE [TABLENAME].[COLUMNNAME] 
    IN STRING_SPLIT(@CommaDelimitedString, ',')
    

    对于旧版本,您可以选择多个用户定义的函数,我个人最喜欢的是 Jeff Moden 的DelimitedSplit8K。如需更多选项,请阅读 Aaron Bertrand 的 Split strings the right way – or the next best way.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-29
      • 2013-09-12
      • 2022-01-02
      • 1970-01-01
      • 2014-09-26
      • 1970-01-01
      相关资源
      最近更新 更多