1

对于一个选择语句,我在配置文件中将一部分 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真,如果提供了填充列表,则对于列表中与列表匹配的每个元素都为真。

但是,如果我提供一个填充列表,它将不适用于 where 语句前半部分的比较:

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

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

4

3 回答 3

0

试试这个方法

SELECT COL1
    ,COL2
FROM TABLE1
WHERE COL2 IN (
            CASE 
            WHEN $EXTERNAL_PARAMETER = ''
                THEN COL2 
            ELSE $EXTERNAL_PARAMETER
            END)
于 2016-05-23T08:52:31.637 回答
0

试试这样的,

SELECT COL1
    ,COL2
FROM TABLE1
WHERE COL2 IN ($EXTERNAL_PARAMETER)
    OR 1 = (
        CASE 
            WHEN $EXTERNAL_PARAMETER = ''
                THEN 1
            ELSE 0
            END
        )
于 2016-05-23T08:45:54.360 回答
0

尝试这个

 IF  $EXTERNAL_PARAMETER = ''
 SET $EXTERNAL_PARAMETER = NULL

SELECT COL1
    ,COL2
FROM TABLE1
WHERE COL2 = ISNULL($EXTERNAL_PARAMETER, COL2 ) 
于 2016-05-23T09:00:55.057 回答