Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Microsoft SQL Server上插入触发器后--更新新创建记录中的列_Sql_Sql Server_Sql Server 2008_Triggers_Database Trigger - Fatal编程技术网

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

在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是一个新插入的记录,现在触发器应该继

我有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更新记录,因为我们要乘以权重

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

有没有关于如何做的建议??或者有人想到的一些例子


我将不胜感激

这是你的扳机,你需要完成它

现在需要更新您发布的列名

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意味着只更新插入的记录。如果我编辑了一条已经存在的记录,并且计算列也发生了更改,我将如何执行触发器。从我现在的触发器来看,计算将只计算新插入的记录;不是旧唱片。谢谢