Sql server Microsoft sql触发器更新多行

Sql server Microsoft sql触发器更新多行,sql-server,tsql,triggers,Sql Server,Tsql,Triggers,我有两张桌子,一张顾客桌和一张销售桌。 我正在尝试创建一个触发器,以便在更新sales表时更新customer表中的销售额 CREATE TRIGGER salesUPDATE ON SALES AFTER INSERT AS UPDATE Customers SET salesAmount = Sales.Amount GO 但我知道销售并不存在。我应该使用连接吗? 此触发器将更新所有列还是需要指定要更新的列?使用包含新值的插入的表名: CREATE TRIGGER salesUPDATE

我有两张桌子,一张顾客桌和一张销售桌。 我正在尝试创建一个触发器,以便在更新sales表时更新customer表中的销售额

CREATE TRIGGER salesUPDATE
ON SALES
AFTER INSERT
AS
UPDATE Customers
SET salesAmount = Sales.Amount
GO
但我知道销售并不存在。我应该使用连接吗?
此触发器将更新所有列还是需要指定要更新的列?

使用包含新值的
插入的
表名:

CREATE TRIGGER salesUPDATE
ON SALES
AFTER INSERT
AS
UPDATE Customers
SET salesAmount = inserted.Amount
GO

使用插入的
表名,其中包含新值:

CREATE TRIGGER salesUPDATE
ON SALES
AFTER INSERT
AS
UPDATE Customers
SET salesAmount = inserted.Amount
GO
下面是一个需要创建的逻辑类型的示例,以维护预授权值。如果要在
销售
表中
求和
金额
,则插入、更新和删除后需要
。那么您需要:

  • 确定所有受影响的客户,以便不更新整个客户表
  • 进行聚合
  • 使用聚合数据的内部联接进行更新
请注意,触发器是基于集合的操作,而不是标量。这意味着他们为x行发射一次,而不是为x行发射x次。因此,您必须在更新过程中考虑多个记录,并像用一个表更新另一个表时在触发器之外那样进行连接

这会对写入操作的性能产生影响,但确实会加快读取速度,但是,如果您不是处于非常高的读取量操作中,则最好使用视图/查询并优化索引。聚合数据的同步不太可能出现混乱。如果您确实执行了触发路径,我建议您也在一些合理的增量(每晚)上设置一个SQL作业,以检查和纠正可能发生的任何不一致

下面是一个需要创建的逻辑类型的示例,以维护预授权值。如果要在
销售
表中
求和
金额
,则插入、更新和删除后需要
。那么您需要:

  • 确定所有受影响的客户,以便不更新整个客户表
  • 进行聚合
  • 使用聚合数据的内部联接进行更新
请注意,触发器是基于集合的操作,而不是标量。这意味着他们为x行发射一次,而不是为x行发射x次。因此,您必须在更新过程中考虑多个记录,并像用一个表更新另一个表时在触发器之外那样进行连接


这会对写入操作的性能产生影响,但确实会加快读取速度,但是,如果您不是处于非常高的读取量操作中,则最好使用视图/查询并优化索引。聚合数据的同步不太可能出现混乱。如果您确实执行了触发路线,我建议您也在合理的增量(每晚)上设置SQL作业,以检查和纠正可能发生的任何不一致。

使用magic tableinserted

CREATE TRIGGER salesUPDATE
ON SALES
AFTER INSERT
AS
BEGIN
  Declare @Amount varchar(50) = (Select top 1 Amount from inserted)
  UPDATE Customers
  SET salesAmount = @Amount
END
GO

注意:插入多条记录的前1名使用magic table插入

CREATE TRIGGER salesUPDATE
ON SALES
AFTER INSERT
AS
BEGIN
  Declare @Amount varchar(50) = (Select top 1 Amount from inserted)
  UPDATE Customers
  SET salesAmount = @Amount
END
GO

注意:插入多条记录的前1名

是、是和是。@rbaryyoung我认为是、否、是。一般来说,您不希望在SQL数据库中进行这种预聚合。相反,您应该创建“按需”汇总的查询和/或视图。更新销售表时您会说
,但插入后触发器是
更新后您可能需要
顺便问一下,您的rdbms是什么?触发器在db.Yes、Yes和Yes之间变化。@RBarryYoung我认为是Yes、No、YesAlso,一般来说,您不希望在SQL数据库中进行这种预聚合。相反,您应该创建“按需”汇总的查询和/或视图。更新销售表时您会说
,但插入后触发器是
更新后您可能需要
顺便问一下,您的rdbms是什么?触发db之间的轴更改。注意:如果在
Sales
中一次插入多行,则无法正常工作。(嗯,取决于DBMS)注意:如果在
Sales
中一次插入多行,则无法正常工作。(嗯,取决于DBMS)