Sql server 2008 在同一个表中更新/插入触发器

Sql server 2008 在同一个表中更新/插入触发器,sql-server-2008,tsql,triggers,Sql Server 2008,Tsql,Triggers,我对这个有点陌生,但我想先写一些简单的触发器。 如果我有带字段A、B、C的mytable。 当用户插入或更新A和B时,我想通过触发器更新C=A+B 这容易吗?谢谢这是一个触发器,可以按您的要求执行。由于mytable中缺少ID列,因此无法仅为已更新的行指定update c,即每次插入/更新时,将为每一行重新计算c值 CREATE TRIGGER mytrigger ON mytable FOR INSERT, UPDATE AS UPDATE mytable SET c =

我对这个有点陌生,但我想先写一些简单的触发器。 如果我有带字段A、B、C的mytable。 当用户插入或更新A和B时,我想通过触发器更新C=A+B
这容易吗?谢谢

这是一个触发器,可以按您的要求执行。由于mytable中缺少ID列,因此无法仅为已更新的行指定update c,即每次插入/更新时,将为每一行重新计算c值

CREATE TRIGGER mytrigger
ON mytable
FOR INSERT, UPDATE
AS
    UPDATE mytable
    SET    c = COALESCE(a, 0) + COALESCE(b, 0)
这将是计算列的合适候选项:

CREATE TABLE mytable
  (
     a INT,
     b INT,
     c AS COALESCE(a, 0) + COALESCE(b, 0)
  )
编辑:示例,ID列仅更新更新更新/插入行的c:

CREATE TRIGGER mytrigger
ON mytable
FOR INSERT, UPDATE
AS
    UPDATE mytable
    SET    c = COALESCE(a, 0) + COALESCE(b, 0)
    WHERE  ID IN (SELECT ID
                  FROM   inserted)
我已经创建了一个你可以现场观看的网站

要运行SQL Fiddle示例,请执行以下操作:

创建模式,添加一些示例数据,然后添加触发器定义 所以c在这一点上是不受欢迎的。 从表中选择,以便查看示例值。 更新一行,然后再次从表中选择可以看到c 现在已经有人居住了。 插入新行,然后再次从表c中选择所有内容 已为此新行填充。
为了进一步解释这是如何工作的——在触发器执行期间,我假设SQL server现在正在使用它创建两个插入和删除的临时表,其中包含受影响行的副本——如果需要从这些表中获取数据,我们可以连接或选择这些表;在本例中,仅获取受更新/插入操作影响的ID列表,然后仅更新这些行的c。有关此操作的更多详细信息,请参阅。

您使用的是哪个数据库?不要为此使用触发器。在执行select时,始终可以检索该总和。为了方便起见,你想考虑一下。一般来说:永远不要在数据库中存储可以从现有值派生的值。该触发器将在每次更新任何内容时更新每一行。这必然是一个性能问题。不管怎样,计算列是正确的选择您可能希望它保持不变,但至少在SQL Server中是这样。@HLGEM是的,我知道,我在回答中已经提到了这一点-我假设这是一个学习练习,OP只是想知道如何做。我知道,使用适当的ID列,您可以连接到触发器中插入的表中,以仅更新相关行,但示例模式中没有提到此类列。关于持久化的观点很好,但是OP仍然没有回答他们正在使用哪种RDBMS的问题-谢谢这是一个更复杂的计算。我想先学习MS SQL 2008的概念。这是一个ERP软件的数据库,所以我们无法控制结构。我只想计算这个C字段,但不确定触发器是如何工作的。是的,我应该提到ID列。如果是更新操作,我在哪里可以找到匹配的a&b?在我的桌子里?如果是插入,是否需要在插入中“选择”?在mytable上为INSERT创建触发器mytrigger作为更新mytable集合c=合并从插入的i中选择a,其中i.id=id,0+合并从插入的i中选择b,其中i.id=id,0@HoangMN我已经更新了我的答案,包括一个带有id列的示例,以及一个实时演示和解释。