触发器问题 大家帮忙!谢谢~~~

ljb2000 2003-09-02 11:31:42
假设在触发器有下面代码片段:
declare @flag int
set @tmpflag = select max(i) from tableB
insert temp_tableA(id,name,flag) select id,name,@tmpflag+1 from inserted

这段代码在tableA UPDATE时触发,
我想得到的结果是,不论同时UPDATE多少条记录都会有如下结果:
temp_tableA:
'id_a' 'name_a' 1
'id_b' 'name_b' 2
'id_c' 'name_c' 3

但是目前代码如果象上面那样写,只在每次UPDATE一条记录时才会实现,
如果根据条件同时UPDATE很多条记录会产生下面的结果:
temp_tableA:
'id_a' 'name_a' 1
'id_b' 'name_b' 1
'id_c' 'name_c' 1

请问我怎样写才能得到我想要的结果呢?
...全文
43 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
w_rose 2003-09-03
  • 打赏
  • 举报
回复
declare @flag table(row int identity,id int)
insert @flag(id) select id from inserted
insert temp_tableA(id,name,flag)
select i.id,i.name,(select isnull(max(i),0) from tableB)+f.row
from inserted as i inner join @flag as f on i.id=f.id
ljb2000 2003-09-03
  • 打赏
  • 举报
回复
id是会被修改的 所以不能用它做为条件

我想解决的是在某个表里写个UPDATE触发器
当其被UPDATE时往其对应的目的表里写数据
每条记录被UPDATE时同时将deleted和inserted里的记录插入目的表
但是当多条记录被UPDATE时
SQLSERVER会先把所有的deleted里的记录先插入目的表
再把所有的inserted里的记录插入目标表
根据需求不可以这样
必须逐条UPDATE
即deleted后inserted再进行下一条的deleted和inserted
我想到了使用游标
不过我从没用过
看帮助也搞不清楚
哪位老大能帮忙给个例子啊?
我先谢过了!!!
yun198183 2003-09-03
  • 打赏
  • 举报
回复
up学习
pengdali 2003-09-03
  • 打赏
  • 举报
回复
declare @flag int
set @tmpflag = select max(i) from tableB
insert temp_tableA (id,name,flag) select id,name,@tmpflag+(select sum(1) from inserted where id<=tem.id) from inserted tem
yujohny 2003-09-03
  • 打赏
  • 举报
回复
declare @tmpflag int
select @tmpflag = 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
ljb2000 2003-09-03
  • 打赏
  • 举报
回复
上去啊
大家帮忙
谢谢

34,874

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧