小编典典

创建一个触发器,该触发器在列更新时将值插入到新表中

sql

我一直在这里查看有关触发器的先前答案,但是找不到我确切需要的答案,但是我敢肯定我的问题已经被问过/回答过。

我试图跟踪对table1中columnA和columnB的任何更改。

如果此值更改,我想通过将现有值和新值插入带有日期的其他表中来跟踪值。

我一直在寻找对插入使用这样的东西,但是不确定如何添加来获取源表(table1)的现有值和新值:

CREATE TRIGGER NewTrigger ON table1
FOR INSERT
AS

INSERT INTO table2
        (columnA , columnB, todaysDate)
    .
    .

go

我需要使用(我认为)

Before update ON table1 FOR EACH ROW
   .
   .
   .
BEGIN

并查看所有更改,然后先插入这些更改,然后在更新后执行相同的操作?


阅读 215

收藏
2021-04-15

共1个答案

小编典典

这样的事情应该可以满足您的需求。您将在INSERT下面的语句中插入值,以指示在中执行的操作MyLogTable

CREATE TRIGGER [dbo].[TRIG_MyTable]
ON [dbo].[MyTable]
AFTER INSERT, UPDATE

AS

DECLARE @INS int, @DEL int

SELECT @INS = COUNT(*) FROM INSERTED
SELECT @DEL = COUNT(*) FROM DELETED

IF @INS > 0 AND @DEL > 0 
BEGIN

    -- a record got updated, so log accordingly.

    INSERT INTO MyLogTable
    SELECT 'New Values', getdate() FROM INSERTED

    INSERT INTO MyLogTable
    SELECT 'Old Values', getdate() FROM DELETED

END

ELSE 
BEGIN

    -- a new record was inserted.

    INSERT INTO MyLogTable
    SELECT 'Insert', getdate() FROM INSERTED

END

如果你想,你也可以从添加列INSERTEDDELETED你的日志表,以及如果你想捕捉的是得到了插入或更新的实际列值。

2021-04-15