在Microsoft SQL Server上插入触发器之后-更新新创建的记录中的列

时间:2018-08-06 16:57:01

标签: sql sql-server sql-server-2008 triggers database-trigger

我有3个表数据表,LookUp_1,LookUp_2 ,所有表都具有主键列 id score1_id和score2_id 列是外键列。在LookUp_1 中具有 id的score1_id链接以及在LookUp_2 中具有 id的score2_id链接。

enter image description here

我的问题是: 我需要创建一个插入后触发器,该触发器会将计算列从null更新为特定的数字/值。这仅在将新记录插入到数据表中时发生,并且只应影响新创建的记录。因此,对于我的示例, id 1 是一条新插入的记录,现在触发器应继续并使用 score1_id和score2_id <来更新计算列 / strong>。因此,它应该进入 LookUp1和LookUp2 并检查每个ID的权重。因此,例如:3 = 7和2 = 3。因此,在触发器完成后,记录应使用计算列= 21更新(因为我们要乘以权重)

因此更新的表记录应如下所示:

enter image description here

关于如何执行此操作的任何建议?还是有人想到的一些例子?

我将不胜感激!

1 个答案:

答案 0 :(得分:0)

这是您的触发器(那么您需要完成它)

现在您必须更新列名。

CREATE TRIGGER [triggername]   
ON   [data]

 AFTER    
INSERT   
AS 
BEGIN
    declare @v1 int = (Select weight from lookup1 where id=inserted.scoreid1
        ,@v2 int = (Select weight from lookup2 where id=inserted.scoreid2)

    update data
    set calculation = @v1*@v2
    where inserted.id = data.id
END

或多次插入:

CREATE TRIGGER [triggername]   
ON   [data]

 AFTER    
INSERT   
AS 
BEGIN
update data
    set calculation = l1.weight*l2.weight
from data d
join lookup_1 l1 on d.scoreID1=l1.id
join lookup_2 l2 on d.scoreid2=l2.id
join inserted on inserted.id = d.id
END