我有一個存儲過程,它能夠更新下面的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
合併是_how_ NULL表示「保持原樣」;我的建議保持了這個功能。 – cco
使用Coalesce作爲NullIf中的第一個參數是天才。認識到可能存在SQL Server和LINQ版本要求,以便在所有情況下都能正常工作。 (注意,我刪除了以前的評論,從我的意思後退180度) –
非常感謝 – BruceyBandit