[英]Merge inserted values against temp table leaving out null values
在我的過程中,我需要創建一個INSTEAD OF INSERT
觸發器,該觸發器將接受記錄的新值並為其創建新版本,例如:
注意:由於業務需求,表列會不斷變化。 因此,如果有一種解決方案將支持table to table
合並而不是column to column
合並,那就太棒了。
ExampleTable
VersionID |ID |Value 1 |Value 2
1 |1 |abc | 123
查詢示例
INSERT INTO ExampleTable (ID,[Value 1]) VALUES (1,'testabc')
結果表:
VersionID |ID |Value 1 |Value 2
1 |1 |abc | 123
2 |1 |testabc | 123
在這一刻,我有這樣的事情:
-- Get data
SELECT TOP 1 * INTO #ExistingData FROM dbo.ExampleTableLatestVersionView
WHERE ID = @ID
-- Merge incoming data
MERGE #ExistingData AS target
USING inserted as source
ON (target.ID= source.ID)
WHEN MATCHED
THEN UPDATE SET target.[Value 1] = source.[Value 1],
target.[Value 2] = source.[Value 2];
-- And afterwards I do a new insert into version table
這里的問題是inserted
表中的NULL
值inserted
被覆蓋,而我最終得到以下結果:
VersionID |ID |Value 1 |Value 2
1 |1 |abc | 123
2 |1 |testabc | NULL
我當時正在考慮進行INSTEAD OF UPDATE
,通過引用VersionID
可以獲取以前的值,但是我想知道是否可行。
如果提供的值為null,則將使用現有值:
MERGE #ExistingData AS target
USING inserted as source
ON (target.ID= source.ID)
WHEN MATCHED
THEN UPDATE SET target.[Value 1] = ISNULL( source.[Value 1],target.[Value 1]),
target.[Value 2] = ISNULL( source.[Value 2],target.[Value 2]);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.