在Microsoft SQL Server上插入触发器后--更新新创建记录中的列
我有3个表Data table、LookUp_1、LookUp_2,它们都具有列id,这些都是主键列。score1_id和score2_id列是外键列。score1\u id与LookUp\u 1中的id链接以及score2\u id与LookUp\u 2中的id链接 我的问题是: 我需要创建一个after-insert触发器,它将计算列从null更新为特定的数字/值。只有在将新记录插入数据表时才会发生这种情况,并且只会影响新创建的记录。在我的例子中,id 1是一个新插入的记录,现在触发器应该继续并使用score1\u id和score2\u id更新计算列。因此它应该进入LookUp1和LookUp2并检查每个id的权重。例如:3=7和2=3。因此,在触发器完成后,应使用计算列=21更新记录,因为我们要乘以权重 因此,更新后的表记录应如下所示: 有没有关于如何做的建议??或者有人想到的一些例子在Microsoft SQL Server上插入触发器后--更新新创建记录中的列,sql,sql-server,sql-server-2008,triggers,database-trigger,Sql,Sql Server,Sql Server 2008,Triggers,Database Trigger,我有3个表Data table、LookUp_1、LookUp_2,它们都具有列id,这些都是主键列。score1_id和score2_id列是外键列。score1\u id与LookUp\u 1中的id链接以及score2\u id与LookUp\u 2中的id链接 我的问题是: 我需要创建一个after-insert触发器,它将计算列从null更新为特定的数字/值。只有在将新记录插入数据表时才会发生这种情况,并且只会影响新创建的记录。在我的例子中,id 1是一个新插入的记录,现在触发器应该继
我将不胜感激 这是你的扳机,你需要完成它 现在需要更新您发布的列名
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
它只发生在insert上,然后将它构建到你的insert语句中,而不是制作触发器?@Brad我的任务是只制作触发器语句。好吧,这样做似乎效率低下,而且需要额外的工作。你应该合理地安排它。这是插页。从insert表到最终表需要做什么。这就是你的触发程序。但我同意布拉德的观点,这应该是插入的一部分,而不是触发。或者,如果只是将两列相乘,则将其设为计算值field@Brad任何关于如何进行的建议/尝试了多次插入,效果良好!谢谢,所以muchI想知道这个语句到底是做什么的,它从哪里来的?join inserted on inserted.id=d.id在触发器中,inserted是一个最近插入的表,元数据反映了受影响的表。在inserted.id=d.id上插入join意味着只更新插入的记录。如果我编辑了一条已经存在的记录,并且计算列也发生了更改,我将如何执行触发器。从我现在的触发器来看,计算将只计算新插入的记录;不是旧唱片。谢谢