2016-09-16 66 views
-2

快速的問題:如何設置NULL在聚結合並

clw.ClawbackPercent = Coalesce(@ClawbackPercent, clw.ClawbackPercent) 

比方說,爲列「ClawbackPercent」我有100

的值。如果我執行一個進程並設置參數@ClawbackPercent要使其值爲NULL,那麼該列中的值爲100,這很好。

但是,如果我想將100設置爲NULL,則需要在exec proc語句中編寫什麼內容,或者需要在Coalesce語句中添加什麼內容?

謝謝

+1

然後你跳過coalesce表達式。 – jarlh

+0

您可以列出您的各種方案的「@ ClawbackPercent」值,當前的'ClawbackPercent'列值和預期的'ClawbackPercent'列值之後的值?這聽起來像你期望能夠在兩種不同的場景中將'@ ClawbackPercent'設置爲NULL,並且讓我們以某種方式編寫一個奇蹟般地以兩種不同方式表現的查詢。 –

+0

所以如果參數是NULL,SP應該做什麼?保留以前的值還是替換它?我想你知道如何做到這一點。 – Andrew

回答

0

這聽起來像你想100是一個存儲過程的參數的默認價值,不一定以取代該值都爲NULL。如果是這種情況,則不需要COALESCE,但需要爲proc定義中的參數提供默認值。

例如

CREATE PROC dbo.MyProc (
@MyParam INT = 100 
) 
AS 
-- My code here 

如果有人執行此proc時未指定@MyParam的值,則會分配默認值100。如果他們明確指定@MyParam = NULL,則NULL將被分配..

0

那麼很可能你不應該使用​​3210,而是可以使用如下case聲明:在SELECT語句

clw.ClawbackPercent = CASE WHEN @ClawbackPercent = 100 
           THEN NULL 
          ELSE 
           @ClawbackPercent END 

0

您有以下方式來寫:

CREATE PROCEDURE sp_test(
    @ClawbackPercent VARCHAR(30) 
) AS 
BEGIN 
    SELECT COALESCE(@ClawbackPercent, '100') 
END 

--call如下,如果你想返回第2V ALUE然後,EXEC sp_test對它NULL

--IF你的第二個,三分......參數是整數,然後簡單地強制轉換爲VARCHAR

EXEC sp_test 'NULL'