declare @tmpflag int
set @tmpflag = select max(i) from tableB
select id,name,identity(int,1,1) as no into #tmp from inserted
insert temp_tableA(id,name,flag) select id,name,@tmpflag+no from #tmp
set @tmpflag = select max(i) from tableB
select id,name,identity(int,1,1) as no into #tmp from inserted
insert temp_tableA(id,name,flag) select id,name,@tmpflag+no from #tmp
CREATE TRIGGER TEST ON temp_tableA
FOR INSERT,UPDATE
AS
BEGIN
IF EXISTS(SELECT 1 FROM temp_tableA A,INSERTED B WHERE A.ID=B.ID
AND A.NAME=B.NAME)
BEGIN
declare @flag int
set @tmpflag = select max(i) from tableB
insert temp_tableA(id,name,flag) select id,name,@tmpflag+1 from inserted
END
ELSE
insert temp_tableA(id,name,flag) select id,name,'1' from insertedEND
CREATE TRIGGER TEST ON temp_tableA
INSETAD OF INSERT,UPDATE
AS
BEGIN
IF EXISTS(SELECT 1 FROM temp_tableA A,INSERTED B WHERE A.ID=B.ID
AND A.NAME=B.NAME)
BEGIN
declare @flag int
set @tmpflag = select max(i) from tableB
insert temp_tableA(id,name,flag) select id,name,@tmpflag+1 from inserted
END
ELSE
insert temp_tableA(id,name,flag) select id,name,'1' from insertedEND
set @tmpflag = select max(i) from tableB
改为
select @tmpflag = max(i) from tableB
当其被UPDATE时往其对应的目的表里写数据
每条记录被UPDATE时同时将deleted和inserted里的记录插入目的表
但是当多条记录被UPDATE时
SQLSERVER会先把所有的deleted里的记录先插入目的表
再把所有的inserted里的记录插入目标表
根据需求不可以这样
必须逐条UPDATE
即deleted后inserted再进行下一条的deleted和inserted
我想到了使用游标
不过我从没用过
看帮助也搞不清楚
哪位老大能帮忙给个例子啊?