簡體   English   中英

案例何時檢查是否為空

[英]Case When to check if is null

我為報告的客戶提供了一個過濾器,如果有人將其使用的過濾器放在“客戶”中,則它會忽略並帶來所有客戶。 這是我的Where子句。

Where [S].ano_mes = @ano_mes OR @ano_mes IS NULL    
            AND S.cnpj = @cnpj or @cnpj is null     
            AND S.cod_produto = @cod_produto or @cod_produto is null    
            AND CASE WHEN (len(@cnpj) > 0) THEN 
                 (S.CGC_Cliente +''-''+S.Seq_Cliente) in(SELECT cnpjseq FROM #Tb_CliSelecionados)
                    END

問題出在CASE WHEN部分,其余部分起作用。

如果變量@cnpj的值為THEN,則應使用過濾器。

過濾器是CGC_CLIENTE和SEQ_CLIENTE一起。

表#Tb_CliSelecionados具有參數Concatenated等於,例如,別名為S的表和#Tb_CliSelecionados具有'060746948041730-00'

我在“ IN”中分兩部分得到錯誤提示,在“ IN”附近說不正確的語法,在END中說“ END”附近的不正確的語法。Expection“)”

有人知道我在什么情況下做錯了嗎?

CASE返回一個表達式不是流控制。

 AND CASE WHEN len(@cnpj) IS NULL 
               THEN 1
          WHEN (len(@cnpj) > 0) 
               THEN  CASE WHEN exists
                           (SELECT 1 
                            FROM #Tb_CliSelecionados
                            WHERE cnpjseq = S.CGC_Cliente +''-''+ S.Seq_Cliente )
                          THEN 1 -- if exist the match return the row
                          ELSE 0 -- other wise ignore the row
                     END
         ELSE 1 -- if len(@cnpj) == 0 then return all rows
     END = 1  -- HERE YOU return the row if CASE return 1

CASE WHEN子句不正確。 它應該看起來像:

         AND CASE 
             WHEN @cnpj IS NULL
                 THEN 1
             WHEN (len(@cnpj) = 0) 
                 THEN 1
             WHEN (S.CGC_Cliente +''-''+S.Seq_Cliente) in (SELECT cnpjseq FROM #Tb_CliSelecionados
                 THEN 1
             ELSE 0
         END = 1

您可以將該部分更改為

AND ( len(@cnpj) > 0
       AND S.CGC_Cliente + '-' + S.Seq_Cliente in (SELECT cnpjseq FROM #Tb_CliSelecionados))

暫無
暫無

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

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