2016-05-23 46 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) 
相關問題