触发器问题 大家帮忙!

ljb2000 2003-09-02 11:00:55
假设在触发器有下面代码片段:
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

请问我怎样写才能得到我想要的结果呢?

...全文
29 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
ljb2000 2003-09-03
  • 打赏
  • 举报
回复
我想解决的是在某个表里写个UPDATE触发器
当其被UPDATE时往其对应的目的表里写数据
每条记录被UPDATE时同时将deleted和inserted里的记录插入目的表
但是当多条记录被UPDATE时
SQLSERVER会先把所有的deleted里的记录先插入目的表
再把所有的inserted里的记录插入目标表
根据需求不可以这样
必须逐条UPDATE
即deleted后inserted再进行下一条的deleted和inserted
我想到了使用游标
不过我从没用过
看帮助也搞不清楚
哪位老大能帮忙给个例子啊?
ljb2000 2003-09-03
  • 打赏
  • 举报
回复
问题还未解决

大家快帮帮我啊

不然程序没法写下去了

谢谢大家~~~
liuyun2003 2003-09-03
  • 打赏
  • 举报
回复
改@tmpflag 为@@tmpflag 试一下。不过这样你就不能在其他地方引用这个变量名了。
zarge 2003-09-02
  • 打赏
  • 举报
回复
更正一下
set @tmpflag = select max(i) from tableB
改为
select @tmpflag = max(i) from tableB

ljb2000 2003-09-02
  • 打赏
  • 举报
回复
zarge(鲨至) 朋友的做法我试验时提示我"select"那里有错误

loverforever(学无止境) 朋友你的方法得不到我想要的结果

再帮忙想想好吗?

谢谢!
loverforever 2003-09-02
  • 打赏
  • 举报
回复
用INSTEAD OF吧
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 inserted

END

loverforever 2003-09-02
  • 打赏
  • 举报
回复
用INSTEAD OF吧
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 inserted

END
zarge 2003-09-02
  • 打赏
  • 举报
回复
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

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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