应该是每一个INSERT都会触发一个触发器,生成新的INSERTED,不会产生冲突的。
解决方案 »
- cson_cson\hery2002,高手们请进,求一SQL语句
- 请教一条存储过程procedure写法
- sqlserver 差异备份的问题
- 再求一简单SQL语句,求到即发分。
- 查找字符串的问题
- sql server的lower函数的参数是什么?
- sql 的难点,请大侠帮忙看看
- 求SUM在求SUM的问题,而且要在同一个表中显示~~~~求救!!!
- 请教各路高手 text数据类型 存储的 a.b.c.d 返回的结果要求是 a.b.c
- 请问一个sql语句写法问题,100分!!!在线等待
- 分析服务器中建立挖掘模型后处理时出错,请问各位大虾看看是怎么回事?(急)
- 求助:如何用SQL语句获得表中第500到第600记录?
触发器
触发器是一种特殊类型的存储过程,当使用下面的一种或多种数据修改操作在指定表中对数据进行修改时,触发器会生效:UPDATE、INSERT 或 DELETE。触发器可以查询其它表,而且可以包含复杂的 SQL 语句。它们主要用于强制复杂的业务规则或要求。例如,可以控制是否允许基于顾客的当前帐户状态插入定单。触发器还有助于强制引用完整性,以便在添加、更新或删除表中的行时保留表之间已定义的关系。然而,强制引用完整性的最好方法是在相关表中定义主键和外键约束。如果使用数据库关系图,则可以在表之间创建关系以自动创建外键约束。有关详细信息,请参见表关系。使用触发器的优点
触发器的优点如下: 触发器是自动的:它们在对表的数据作了任何修改(比如手工输入或者应用程序采取的操作)之后立即被激活。
触发器可以通过数据库中的相关表进行层叠更改。例如,可以在 titles 表的 title_id 列上写入一个删除触发器,以使其它表中的各匹配行采取删除操作。该触发器用 title_id 列作为唯一键,在 titleauthor、sales 及 roysched 表中对各匹配行进行定位。
触发器可以强制限制,这些限制比用 CHECK 约束所定义的更复杂。与 CHECK 约束不同的是,触发器可以引用其它表中的列。例如,触发器可以回滚试图对价格低于 10 美元的书(存储在 titles 表中)应用折扣(存储在 discounts 表中)的更新。
加进来,能不能给出一个示例?谢谢 使用sqlserver2000
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 行)
--*/
我原来遇到过,权做参考!!!