在 Microsoft SQL Server 上插入触发器后 -- 更新新创建记录中的列
Posted
技术标签:
【中文标题】在 Microsoft SQL Server 上插入触发器后 -- 更新新创建记录中的列【英文标题】:After Insert Trigger on Microsoft SQL Server -- Updating a column in a newly created record 【发布时间】:2018-08-06 16:57:00 【问题描述】:我有 3 个表数据表,LookUp_1,LookUp_2 都有列 id 是主键列。 score1_id 和 score2_id 列是外键列。 score1_id 与 lookUp_1 中的 id 链接, score2_id 与 LookUp_2 中的 id 链接。
我的问题是: 我需要创建一个 after insert 触发器,它将计算列从 null 更新为特定的数字/值。这只发生在将新记录插入数据表时,它只会影响新创建的记录。因此,对于我的示例,id 1 是新插入的记录,现在触发器应该继续并使用 score1_id 和 score2_id计算列 /强>。所以它应该进入 LookUp1 和 LookUp2 并检查每个 id 的权重。例如:3=7 和 2=3。所以在触发完成后,记录应该更新为计算列 = 21(因为我们正在乘以权重)
所以更新后的表记录应该是这样的:
关于如何解决这个问题的任何建议?或者有人想到的一些例子?
我将不胜感激!
【问题讨论】:
它只发生在插入时,然后将其构建到您的插入语句中而不是触发? @Brad 我的任务是只做一个触发语句。 好吧,这样做似乎效率低下,而且需要额外的工作。 你应该把它放在逻辑上。这是插入。你需要做什么才能从插入到最终表。 (这就是您将其编程为触发器的内容)。但我同意布拉德的观点,这应该是插入的一部分,而不是触发器。或者,如果它只是将两列相乘,则将其设为计算字段 @Brad 任何建议如何去做/ 【参考方案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
【讨论】:
尝试了多个插入,它的工作原理!非常感谢 我想知道这个语句究竟是做什么的,它来自哪里? 加入插入inserted.id = d.id 在触发器中,inserted 是最近插入的表,元数据反映了受影响的表。 “join inserted.id = d.id”表示只更新插入的记录。 如果我编辑一个已经存在的记录并且计算列也发生了变化,我将如何进行触发器。从我现在的触发器来看,calculation 只会计算新插入的记录;不是旧记录。谢谢以上是关于在 Microsoft SQL Server 上插入触发器后 -- 更新新创建记录中的列的主要内容,如果未能解决你的问题,请参考以下文章
标题: Microsoft SQL Server Management Studio
ubuntu下连microsoft sql server解决方案
如何在 Microsoft SQL Server 中“取消堆叠”SQL 中的数据
java.sql.SQLException [Microsoft] [ODBC SQL Server Driver] [SQL Server] 对象名“表名”无效
安装sql server 2008 R2,提示错误:此计算机上安装了 Microsoft Visual Studio 2008 的早期版本。请在安装 SQL Server 2008 前将 Micros