簡體   English   中英

動態where子句基於變量

[英]Dynamic where clause based on variable

我正在使用SQL中的select語句,並且遇到了嘗試創建包含case語句或if else語句的where子句的問題。 我想根據變量的值選擇記錄。 如果變量為“True”,則僅返回列為null的select語句中的記錄。 如果變量不是“True”,則返回所有記錄,無論該列是否為空。

關於如何做到這一點的任何提示?

以下是我想要做的一個簡單示例:

declare @option1 as varchar(5)

--This can be True or False so to test i just put the Set option below
set @option1 = 'True'

Select a,b,c,d...
from ...
where d = case when @option1 = 'True' then NULL End

這是我不知道該怎么做的部分。 如果變量為“True”,我只需要過濾掉記錄,因此不確定在案例的else部分放置什么。

您不能像CASE語句那樣測試d = NULL ,因為它總是返回false,因為NULL不等於NULL (除非您將ANSI_NULLS設置為'off')。

最簡單的方法是將WHERE子句更改為:

WHERE @option1 = 'False' OR d IS NULL

如果您出於某種原因更喜歡使用CASE語句,可以這樣寫:

WHERE 1 = CASE WHEN @option1 = 'False' THEN 1 
               WHEN @option1 = 'True' AND d IS NULL THEN 1 
               ELSE 0 
          END

這個:

更新:PinnyM已經把我拉了出來。 我在這里為群眾的教育留下了令人尷尬的邏輯缺陷。 我在“試試這個”之后提出的解決方案當然仍然有效,但PinnyM的解決方案更優雅,應該使用。

WHERE @ option1 ='False'或者d為空

將始終返回給定當前select語句的所有結果(假設@ Option1只是傳入的標志參數)。

嘗試這個:

SELECT a, b, c, d
WHERE 
    -- Returns only rows where d is null (if @Option1 is True)
    (@Option1 = 'True' AND d IS NULL) 
    OR
     -- returns all the rows (if @Option1 is False)
    (@Option1 = 'False')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM