2016-09-18 60 views
0

我有一個存儲過程,它能夠更新下面的4列,因爲有4個參數(每個列只有一個參數,而ClawbackID是唯一沒有更改)。如何在輸入NULL時設置NULL保留舊值

現在沒有固定數量的可以更新的列,我可以選擇更新1列或3列或全部4列。因此,爲了減少人爲錯誤,我建立了一個合併,這樣如果用戶在執行某個過程時爲特定參數輸入「NULL」,則原始數量將保持不變。

對於'ClawbackAmount'的第3行的示例,如果我輸入NULL並執行,它仍將顯示'ClawbackAmount'900.54。現在我遇到的問題是實際上希望將這個數量設置爲'NULL',但我不想失去如果在執行我的過程時輸入'NULL'以保持舊值的功能。

我的問題是有沒有一種方法或想法,你可以想到我在哪裏輸入NULL,然後默認值保持不變,但如果我輸入類似''那麼它將默認爲'NULL'?

或者輸入單詞'SAME'來保持默認值,然後輸入'NULL'作爲空值?只是想法真的解決它?

以下是我與包括參數的代碼,因爲他們開始用@:

update clw 
set clw.PaymentID = Coalesce(@PaymentID, clw.PaymentId) 
,clw.ClawbackDate = Coalesce(@ClawbackDate, clw.ClawbackDate) 
, clw.ClawbackPercent = Coalesce(@ClawbackPercent, clw.ClawbackPercent) 
, clw.ClawbackAmount = Coalesce(@ClawbackAmount,clw.ClawbackAmount) 
OUTPUT '[Fees].EBD.Clawback' 'TableName','ClawbackId', inserted.ClawbackId, 
Core.updXMLFragment('PaymentId', inserted.PaymentId, deleted.PaymentId) + 
Core.updXMLFragment('ClawbackDate', Convert(varchar(50),inserted.ClawbackDate, 112), Convert(varchar(50),deleted.ClawbackDate, 112)) + 
Core.updXMLFragment('ClawbackPercent', inserted.ClawbackPercent, deleted.ClawbackPercent) + 
Core.updXMLFragment('ClawbackAmount', inserted.ClawbackAmount, deleted.ClawbackAmount) 

    INTO @OutputList 
from [Fees].EBD.Clawback clw 
Where 
ClawbackId = @ClawbackID 

下面是執行爲,如果我要做出更改3行的一個例子代碼:

第一個參數是ClawbackID(這並沒有改變,但需要知道操縱哪一行。

二參數是PaymentID是NULL作爲要保持相同的

第三個參數是Clawbackdate如要保持相同的

第四參數是ClawbackPercent這就需要將0.25

最後一個參數是ClawbackAmount,我需要設置爲NULL是NULL。這是一個int字段順便說一句,但讓它爲NULL將保持原始量顯示。

exec SupportAudit.BI.UpdateHotelClawback 28817, NULL, NULL, 0.25, NULL 

回答

3

我通常使用一些特定的無效值作爲指示器列應設置爲NULL。在ClawbackPercentClawbackAmount的情況下,-1似乎是一個很好的候選人。變化如下所示:

... 
, clw.ClawbackPercent = NullIf(Coalesce(@ClawbackPercent, clw.ClawbackPercent), -1) 
, clw.ClawbackAmount = NullIf(Coalesce(@ClawbackAmount,clw.ClawbackAmount), -1) 
... 

對於字符串參數,''(空字符串)可能是合適的選擇。

+1

合併是_how_ NULL表示「保持原樣」;我的建議保持了這個功能。 – cco

+0

使用Coalesce作爲NullIf中的第一個參數是天才。認識到可能存在SQL Server和LINQ版本要求,以便在所有情況下都能正常工作。 (注意,我刪除了以前的評論,從我的意思後退180度) –

+0

非常感謝 – BruceyBandit