[英]Log changes to data in a table1 and insert the old and New value in Table2 without triggers
首先,我不是SQL專家,所以想實現以下功能,這對於SQL專家而言可能很容易實現。
實際上,我們要跟蹤另一個“歷史記錄”表中一個表上每個條目的日志,其“列名”用於更新數據,而“更新后的列”的“舊”和“新”值是什么。
例如,如果我們更新Table1的Column1值,那么在歷史記錄表中,我們必須插入Column1的Old和New值以及列名本身(即,更新哪一列以及使用什么值)。
如果您不喜歡使用TRIGGERS
,則可以在以下方式使用OUTPUT
:
更新的答案
您可以將更新的值存儲在不同的列中,如果未更新值,則可以傳遞NULL
,例如:
QUERY
UPDATE #t1
SET FirstName = 'bar',
LastName = 'foobar'
OUTPUT INSERTED.Id,
DELETED.FirstName,
CASE WHEN INSERTED.FirstName = DELETED.FirstName THEN NULL ELSE INSERTED.FirstName END,
DELETED.LastName,
CASE WHEN INSERTED.LastName = DELETED.LastName THEN NULL ELSE INSERTED.LastName END,
DELETED.City,
CASE WHEN INSERTED.City = DELETED.City THEN NULL ELSE INSERTED.City END
INTO #t2 (Id, [First Name - Old], [First Name - New], [Last Name - Old], [Last Name - New], [City - Old], [City - New])
樣本數據
CREATE TABLE #t1
(
Id INT,
FirstName NVARCHAR(MAX),
LastName NVARCHAR(MAX),
City NVARCHAR(MAX)
)
CREATE TABLE #t2
(
Id INT,
[First Name - Old] NVARCHAR(MAX),
[First Name - New] NVARCHAR(MAX),
[Last Name - Old] NVARCHAR(MAX),
[Last Name - New] NVARCHAR(MAX),
[City - Old] NVARCHAR(MAX),
[City - New] NVARCHAR(MAX),
)
INSERT INTO #t1 VALUES (1, 'foo', 'foo2', 'foo3')
從更新表中輸出
Id [First Name - Old] [First Name - New] [Last Name - Old] [Last Name - New] [City - Old] [City - New]
1 foo bar foo2 foobar foo3 NULL
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.