触发器每次只对最后一条记录做出响应,要实现成批触发,需要操作inserted、deleted两个表,因为这两个表中保存的是你一次操作的插入、删除的所有记录,具体实现,可以自己写,不复杂。
解决方案 »
- 树上的鸟儿,请进来一下,又是上次那问题---SQL动态转换问题
- 关于安装SQL 2005版本的问题
- 简单问题 不知道哪里出错了 解决后散分
- insert语句中带有select,请问如何做谢谢
- sql server 2008启动不了服务,麻烦帮忙下!谢谢
- sql问题
- 如何从MS SQL中导出.sql文件可以用来生成表和数据的,即有Insert Into TableName(ID,Name,Memo) values (1,'User01','Test')
- 求查询爸爸的SQL语句
- 关于SQLDMO中一个非常难解决的问题。急急急!!!
- 如何把异地数据库数据定时备份到本地数据库??
- SQL可以通过URL获得数据么?
- 在MS SQL Server 2000中,是否可以并发执行同一存储过程!?!?!?!?
有两个表。一个表示客户表。另一个表是订单表。如何在订单表中设置一个触发器,当订单表增加一个数据的时候,那么根据增加数据的客户编号,和金额,自动更新客户表中的客户的总金额(当前金额+订单表中的新增的那个金额)--触发器的写法:
CREATE TRIGGER trig_tz ON [dbo].[item]
FOR INSERT
AS
update a set money_total=isnull(a.money_total,0)+isnull(b.money_total,0)
from cust a join(
select custid,money_total=sum([money])
from inserted
group by custid
)b on a.cust_id=b.custid
drop table test2
go
create table test1(id int,name varchar(10))
create table test2(id int,name varchar(10))
go
insert into test1 values(1,'aaa')
insert into test1 values(2,'bbb')insert into test2 values(1,'aaa')
insert into test2 values(2,'bbb')
go
update test1 set id=id+1,name=name+name
select * from test1
select * from test2我想写一个触发器,使test2和test1保持一致,应该怎么写呢?
for insert,update,delete
as
delete from test2 a
where exists(select 1 from deleted where id=a.id and name=a.name)insert test2 select * from inserted
for insert as
insert test2(......) select ...... from inserted a where not exists
(select * from deleted where id=a.id and name=a.name)
go说明;
1. 不是所有对象都很容易删除的。特别是当有触发器时,删除操作有业务意义。因此,修改一个记录并不等价于“先删除原来记录再加入新记录”,这里也类似,要顺应业务上的定义,避免搞乱业务。2. “......”的地方应该填上字段名列表,不填是极其“坏味道”的做法,能正确使用仅仅是当前暂时的侥幸。