簡體   English   中英

具有NULL和非null值的SELECT語句

[英]SELECT Statement with NULL and Non-Null Values

我正在寫一個存儲過程,它應該能夠接受空值(tmpParameter)和非空值(smallint)。 我將如何組合邏輯,以便它可以在一個select語句中處理這兩個邏輯?

IF @tmpParameter IS NULL
SELECT [Key]
      ,[Parent_Key]
      ,[Parent_Code]
      ,[Code]
      ,[Desc] 
      ,[Point]
      ,[By] 
      ,[On]
FROM [db].[stats] t WHERE t.[Parent_Key] IS NULL
ELSE
SELECT [Key]
      ,[Parent_Key]
      ,[Parent_Code]
      ,[Code]
      ,[Desc] 
      ,[Point]
      ,[By] 
      ,[On]
FROM [db].[stats] t WHERE t.[Parent_Key]= @tmpParameter

我可以用一種方法做到這一點嗎?

我喜歡為讀者寫信。 所以我只想講清楚。 (並且索引友好。)

SELECT  [Key]
        ,[Parent_Key]
        ,[Parent_Code]
        ,[Code]
        ,[Desc] 
        ,[Point]
        ,[By] 
        ,[On]
FROM    [db].[stats] t 
WHERE   t.[Parent_Key] = @tmpParameter 
OR (t.[Parent_Key] IS NULL AND  @tmpParameter IS NULL) 

由於t.[Parent_Key]不能為負,因此可以使用Coalesce強制Null為-1,並在一條語句中進行檢查:

SELECT  [Key]
        ,[Parent_Key]
        ,[Parent_Code]
        ,[Code]
        ,[Desc] 
        ,[Point]
        ,[By] 
        ,[On]
FROM    [db].[stats] t 
WHERE   COALESCE(t.[Parent_Key], -1) = COALESCE(@tmpParameter, -1)

如果@tmpParameter為null,則通過將兩者都強制轉換為-1,它將返回任何Null的Parent_Key 如果不為null,它將返回該值的任何Parent_Key

暫無
暫無

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

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