簡體   English   中英

我需要搜索以匹配存儲為null的值

[英]I need a search to match values that are stored as null

我正在對傳遞多個變量並比較多個字段的單個表進行搜索查詢。 像這樣:

          WHERE  a.callerfname LIKE @FName
                 AND a.callerlname LIKE @LName
                 AND a.callermname LIKE @MName

如果沒有為一個字段選擇任何值,則表單以%的形式發送,因此該字段與所有結果匹配。

一個字段是ProjectID ,它是Guid,可能包含null值。 當我沒有選擇任何項目的情況下進行搜索時,表單會通過空白的Guid(000000-000 ...),然后在這種CASE檢查:

AND a.projectid = CASE WHEN  @ProjectId <> '00000000-0000-0000-0000-000000000000'
                       THEN  @ProjectId
                       ELSE a.projectid
                             END

問題在於,如果行的NULL ProjectIDNULL ProjectID則它自身將不匹配。 我的問題是,guid字段中的空值將匹配什么? 或者,如果與null相比,如何使projectid返回所有值(如果為null)和名稱,則返回%?

在SQL中,NULL不等於任何值,並且NULL不等於NULL。 您必須測試“ IS NULL”。 或者,您可以在測試的兩面都應用一個isull(列,默認值)。 這些都應該起作用。 我不使用Guid,所以我將空的Guid值保持在isNull條件中,因為您需要保持數據類型匹配,並且我認為這是有效的Guid值。

  AND ISNULL(a.projectid, '00000000-0000-0000-0000-000000000000') = CASE WHEN @ProjectId <> '00000000-0000-0000-0000-000000000000' THEN @ProjectId ELSE isnull(a.projectid, '00000000-0000-0000-0000-000000000000') END

要么

AND (a.projectid = CASE WHEN @ProjectId <> '00000000-0000-0000-0000-000000000000' THEN @ProjectId ELSE a.projectid END) OR (a.projectid is null)

這應該是您的項目過濾器。 如果parameter為空guid,則所有項目都匹配;否則為false。 如果不是,則僅匹配一個(或不匹配)。

WHERE (@ProjectId = '00000000-0000-0000-0000-000000000000'
       OR a.projectid = @ProjectId)

暫無
暫無

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

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