新行插入到同一表后,错误更新触发器

埃丽娜(Elina)

我想更新OrigOrderNbr和OrigOrderType(QT类型),因为当我创建第一个列时,它们都是Null值。但是,在创建S2(将QT转换为S2)之后,OrigOrderType和OrigOrderNbr(S2)将从QT参考中​​获取。取而代之的是,我也想将其更新为QT。

http://i.stack.imgur.com/6ipFa.png

http://i.stack.imgur.com/E6qzT.png

CREATE TRIGGER tgg_SOOrder
    ON dbo.SOOrder
    FOR INSERT
    AS
    DECLARE @tOrigOrderType char(2),
            @tOrigOrderNbr nvarchar(15) 
    SELECT  @tOrigOrderType = i.OrderType,
            @tOrigOrderNbr = i.OrderNbr 
    FROM inserted i

    UPDATE dbo.SOOrder 
    SET OrigOrderType = @tOrigOrderType,
        OrigOrderNbr = @tOrigOrderNbr 
    FROM inserted i
    WHERE dbo.SOOrder.CompanyID='2' 
    and   dbo.SOOrder.OrderType=i.OrigOrderType 
    and   dbo.SOOrder.OrderNbr=i.OrigOrderNbr 
GO

在运行该触发器之后,它显示了消息“错误#91:另一个进程已更新了” SOOrder”记录。您的更改将丢失。

酷博

每串长长的评论,包括有关@marc_s和@Damien_The_Unbeliever使用适当的触发器编写技术的一些出色建议,以及我目前对您的问题的更好理解,以下是重新设计的触发器:

CREATE TRIGGER tgg_SOOrder
ON dbo.SOOrder
FOR INSERT
AS

--Update QT record with S2 record's order info
UPDATE  SOOrder
SET     OrigOrderType       =   'S2'
,       OrigOrderNbr        =   i.OrderNbr
FROM    SOOrder                 dest
JOIN    inserted                i
ON      dest.OrderNbr       =   i.OrigOrderNbr
WHERE   dest.OrderType      =   'QT'
AND     i.OrderType         =   'S2'
AND     dest.CompanyID      =   2   --Business logic constraint
AND     dest.OrigOrderNbr   IS  NULL
AND     dest.OrigOrderType  IS  NULL

基本上,该想法是一旦创建了类型为“ S2”的匹配记录,就更新任何类型为“ QT”的记录。此处匹配意味着S2记录的OrigOrderNbr与QT记录的OrderNbr相同。关于CompanyID设置为2的情况,我保留了业务逻辑约束。此外,我们只关心修改OrigOrderNbr和OrigOrderType设置为的QT记录NULL

该触发器不依赖于单行插入;无论插入的行数如何,它都可以工作-几​​乎没有可能破坏行。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Oracle数据库。将行的副本插入到同一表(重复键错误消息)

来自分类Dev

MariaDB和触发器作用于已从中触发的同一表上

来自分类Dev

插入触发器后更新同一表

来自分类Dev

在插入后使用触发器创建新记录并从另一个表中选择

来自分类Dev

请求:更新或插入同一表中的行

来自分类Dev

在仅更新SQL Server 2008中同一表中的特定列之后,更新触发器中的一列

来自分类Dev

触发器在被同一表激发后无法读取该表

来自分类Dev

如何编写一个触发器,该触发器可以在插入时将一个表中的新行复制到另一个表中?

来自分类Dev

使用PostgreSQL自动在同一表上创建触发器以更新另一行

来自分类Dev

在每次使用触发器插入MySQL 5.6中的目标表后,将一列从源表拉至另一表

来自分类Dev

插入后创建触发器,以更新另一个表

来自分类Dev

在同一表中发生插入/更新时触发更新特定列

来自分类Dev

在oracle中插入表B后创建将新行添加到表A中的触发器时出错

来自分类Dev

MySQL插入触发器到表后,FK到第一个表

来自分类Dev

更新触发器需要引起对同一表和字段的更新

来自分类Dev

插入触发器后更新同一表

来自分类Dev

触发更新同一表中同一行的触发器时,其状态取决于其他列的值

来自分类Dev

使用表触发器更新插入的行

来自分类Dev

使用触发器在另一个表上插入数据后更新表

来自分类Dev

触发器(更新后)导致错误?

来自分类Dev

MySQL触发器在更新后将新行插入另一个表

来自分类Dev

SQL触发器以将字段值“移动”到同一表上的另一个字段

来自分类Dev

插入后触发使用来自另一个表的数据更新同一表

来自分类Dev

在插入MySQL触发器之后以更新值或在另一个表中插入新行

来自分类Dev

同一表上的 Oracle 更新触发器

来自分类Dev

如何在更新表后运行触发器然后在同一个表中运行语句更新

来自分类Dev

PL/SQL 触发器在更新或插入后更新同一个表

来自分类Dev

在触发器内部,将原始表中的 n 行插入到新表中

来自分类Dev

使用计算值或触发器用来自同一表中不同行的数据更新一行?

Related 相关文章

  1. 1

    Oracle数据库。将行的副本插入到同一表(重复键错误消息)

  2. 2

    MariaDB和触发器作用于已从中触发的同一表上

  3. 3

    插入触发器后更新同一表

  4. 4

    在插入后使用触发器创建新记录并从另一个表中选择

  5. 5

    请求:更新或插入同一表中的行

  6. 6

    在仅更新SQL Server 2008中同一表中的特定列之后,更新触发器中的一列

  7. 7

    触发器在被同一表激发后无法读取该表

  8. 8

    如何编写一个触发器,该触发器可以在插入时将一个表中的新行复制到另一个表中?

  9. 9

    使用PostgreSQL自动在同一表上创建触发器以更新另一行

  10. 10

    在每次使用触发器插入MySQL 5.6中的目标表后,将一列从源表拉至另一表

  11. 11

    插入后创建触发器,以更新另一个表

  12. 12

    在同一表中发生插入/更新时触发更新特定列

  13. 13

    在oracle中插入表B后创建将新行添加到表A中的触发器时出错

  14. 14

    MySQL插入触发器到表后,FK到第一个表

  15. 15

    更新触发器需要引起对同一表和字段的更新

  16. 16

    插入触发器后更新同一表

  17. 17

    触发更新同一表中同一行的触发器时,其状态取决于其他列的值

  18. 18

    使用表触发器更新插入的行

  19. 19

    使用触发器在另一个表上插入数据后更新表

  20. 20

    触发器(更新后)导致错误?

  21. 21

    MySQL触发器在更新后将新行插入另一个表

  22. 22

    SQL触发器以将字段值“移动”到同一表上的另一个字段

  23. 23

    插入后触发使用来自另一个表的数据更新同一表

  24. 24

    在插入MySQL触发器之后以更新值或在另一个表中插入新行

  25. 25

    同一表上的 Oracle 更新触发器

  26. 26

    如何在更新表后运行触发器然后在同一个表中运行语句更新

  27. 27

    PL/SQL 触发器在更新或插入后更新同一个表

  28. 28

    在触发器内部,将原始表中的 n 行插入到新表中

  29. 29

    使用计算值或触发器用来自同一表中不同行的数据更新一行?

热门标签

归档