当table_1上的任何字段更新时,我需要在Table_2上更新字段的触发器。我创建了一个,但是当我更新Table_2上的table_1中的一条记录时,它正在更新所有字段。
示例SQL: -
Create trigger trigger-1 ON Table_1 After Update
As
begin
SET NOCOUNT ON;
Insert into table_2 (Col1,col2,col3,..etc) Select (ins.column names)
from table_1
假设table_1有很多字段,但我仍然需要更新字段。如何使用触发器仅从table_1到table_2获取更新的字段?
答案 0 :(得分:0)
你的语法错了。您可以使用inserted
表。它包含基表的所有列
INSERT INTO table_2 ( col1, col2, col3, . . .)
SELECT i.cola, i.colb, i.colc, . . .
FROM inserted i
如果您需要知道哪些列已更新,请使用UPDATE( column name )
https://docs.microsoft.com/en-us/sql/t-sql/functions/update-trigger-functions-transact-sql
答案 1 :(得分:0)
最后,我找到了完美的答案。
如果是UPDATE
,则
已删除的表将包含旧值,而Inserted表将包含旧值 包含更新后的新值。
根据要求,如果我们想要触发器中的所有字段,我们需要提及表中的所有字段并写下如下内容:
对于更新后的记录:
CREATE TRIGGER trg_ProdUpdate
ON dbo.Production
AFTER UPDATE
AS
Begin
INSERT INTO dbo.Attribiute (ID, attributeValue, attributetype)
SELECT i.ID, i.prodrecord, i.prodvalue
FROM Production i
INNER JOIN INSERTED d ON i.ID = d.ID
对于UPDATE之前的记录:
CREATE TRIGGER trg_ProdUpdate
ON dbo.Production
AFTER UPDATE
AS
Begin
INSERT INTO dbo.Attribiute (ID, attributeValue, attributetype)
SELECT i.ID, i.prodrecord, i.prodvalue
FROM Attribiute i
INNER JOIN DELETED d ON i.ID = d.ID
我们可以通过抓取Identical字段(在两种情况下都相同)将Inserted和Deleted加入到某些History表中进行审核。 Deleted表中的旧值,Inserted表中的新值,以及将所有内容存储在单独的表中
为了更好地理解,请查看此链接Trigger insert old values- values that was updated