应该是每一个INSERT都会触发一个触发器,生成新的INSERTED,不会产生冲突的。

解决方案 »

  1.   

    触发器是隐性事务,两个用户不会同时操作inserted!
      

  2.   

    触发器能處理多用戶並行操作問題,不會出現樓主假設的問題,但在inserted表與deleted表中可能存在多筆記錄。
    触发器
    触发器是一种特殊类型的存储过程,当使用下面的一种或多种数据修改操作在指定表中对数据进行修改时,触发器会生效:UPDATE、INSERT 或 DELETE。触发器可以查询其它表,而且可以包含复杂的 SQL 语句。它们主要用于强制复杂的业务规则或要求。例如,可以控制是否允许基于顾客的当前帐户状态插入定单。触发器还有助于强制引用完整性,以便在添加、更新或删除表中的行时保留表之间已定义的关系。然而,强制引用完整性的最好方法是在相关表中定义主键和外键约束。如果使用数据库关系图,则可以在表之间创建关系以自动创建外键约束。有关详细信息,请参见表关系。使用触发器的优点
    触发器的优点如下: 触发器是自动的:它们在对表的数据作了任何修改(比如手工输入或者应用程序采取的操作)之后立即被激活。
    触发器可以通过数据库中的相关表进行层叠更改。例如,可以在 titles 表的 title_id 列上写入一个删除触发器,以使其它表中的各匹配行采取删除操作。该触发器用 title_id 列作为唯一键,在 titleauthor、sales 及 roysched 表中对各匹配行进行定位。
    触发器可以强制限制,这些限制比用 CHECK 约束所定义的更复杂。与 CHECK 约束不同的是,触发器可以引用其它表中的列。例如,触发器可以回滚试图对价格低于 10 美元的书(存储在 titles 表中)应用折扣(存储在 discounts 表中)的更新。
      

  3.   

    我想在A表中插入记录后,里面有一数量字段,我想更新B表中的数量字段,将新增的数量
    加进来,能不能给出一个示例?谢谢  使用sqlserver2000
      

  4.   

    只会有一条记录,对于并列的插入,SQL在做实际插入时,还是要排队处理的.所以每个用户的触发是独立的.
      

  5.   

    --示例--测试表,两个表通过编号关联
    create table a表(编号 int,数量 int)create table b表(编号 int,数量 int)
    go--处理触发器
    create trigger tr_insert on a表
    for insert
    as
    --更新已经在B表中有的编号
    update b表 set 数量=isnull(a.数量,0)+isnull(b.数量,0)
    from b表 a join( 
    select 编号,数量=sum(数量) from inserted group by 编号
    )b on a.编号=b.编号--插入不存在的记录
    insert b表(编号,数量)
    select a.编号,a.数量
    from(
    select 编号,数量=sum(数量) from inserted group by 编号
    )a left join b表 b on a.编号=b.编号
    where b.编号 is null
    go--测试数据
    insert a表 select 1,100
    union  all select 2,20
    union  all select 3,120
    union  all select 2,20insert a表 select 1,100
    union  all select 3,20
    union  all select 3,120
    union  all select 4,20
    go--显示结果
    select * from a表
    select * from b表
    go--删除测试
    drop table a表,b表/*--测试结果
    编号          数量          
    ----------- ----------- 
    1           100
    2           20
    3           120
    2           20
    1           100
    3           20
    3           120
    4           20(所影响的行数为 8 行)编号          数量          
    ----------- ----------- 
    1           200
    2           40
    3           260
    4           20(所影响的行数为 4 行)
    --*/
      

  6.   

    我觉得两个用户不可能由于同时插入数据而在一次触发器的过程中处理,应该是分别处理的,但是对应于一个用户,一次是可以插入多条的,比如使用 insert into tablename select或者select into 语句,这时的inserted表中就有多条记录,你必须分别处理他们,比如使用一个表变量的自动增量或者游标来逐个处理;否则触发器会只处理最后插入或者其他操作的一条记录,从而使结果跟期望产生误差。
    我原来遇到过,权做参考!!!