2016-05-23 44 views
1

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所有元素是真实的,真正对列表中的每一个元素如果提供填充列表,则与列表匹配。

但是,如果我提供了一个充满名单也不会在比较的WHERE语句上半年工作:

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

有任何疑问这将使它的工作 - 最好在一条线哪里声明?

+0

提供不为我的工作,我提供一个列表作为外部参数所有答案,所以它总是来'('entry_a','entry_b')=''',这似乎不适合我。我是否需要以不同的格式在外部参数中提供列表? – aldorado

+1

'WHERE'在$ external_list或COL2 IN $ external_list' – adrianm

+0

这是最适合我的情况的优雅的东西,我想我会使用它。但它不包括有人不小心将列表设置为'('entry_a','entry_b','')'的情况。我需要为此找到一张支票。但我猜想它对我有用。 – aldorado

回答

0

尝试这样的事情,

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

比较$ EXTERNAL_PARAMETER('entry_a','entry_b')和字符串''不起作用。 – aldorado

0

尝试这种方式

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

试试这个

IF $EXTERNAL_PARAMETER = '' 
SET $EXTERNAL_PARAMETER = NULL 

SELECT COL1 
    ,COL2 
FROM TABLE1 
WHERE COL2 = ISNULL($EXTERNAL_PARAMETER, COL2) 
相关问题