选择列表中的位置,或者选择所有最优雅的

时间:2016-05-23 08:29:09

标签: sql sql-server list where-clause list-comparison

对于select语句,我在配置文件中将where条件的一部分设置为参数,就像这样(COL2填充了字符串值):

SELECT COL1
      ,COL2
FROM TABLE1
WHERE COL2 = $external_parameter

现在我有一个更复杂的情况,我需要外部参数作为列表。每当COL2的值在列表中时,它应该选择,但是如果没有提供列表或某种"空的"标签,应再次选择每个值。我提出了一个想法,但它没有这样做:

SELECT COL1
      ,COL2
FROM TABLE1
WHERE $external_list = ('') or COL2 IN $external_list

与此类似,当提供空列表时,COL2的所有元素都将为true,如果提供了填充列表,则列表中与列表匹配的每个元素都为true。

但是,如果我提供一个填充列表,它将无法在where语句的前半部分进行比较:

('entry_a', 'entry_b') = ('')

是否有任何查询可以使其工作 - 最好是在一行中哪个语句?

3 个答案:

答案 0 :(得分:0)

尝试这样的事情,

SELECT COL1
    ,COL2
FROM TABLE1
WHERE COL2 IN ($EXTERNAL_PARAMETER)
    OR 1 = (
        CASE 
            WHEN $EXTERNAL_PARAMETER = ''
                THEN 1
            ELSE 0
            END
        )

答案 1 :(得分:0)

试试这种方式

Execute Python script

答案 2 :(得分:0)

试试这个

 IF  $EXTERNAL_PARAMETER = ''
 SET $EXTERNAL_PARAMETER = NULL

SELECT COL1
    ,COL2
FROM TABLE1
WHERE COL2 = ISNULL($EXTERNAL_PARAMETER, COL2 )