sybase触发器怎么能确定是哪一行发生更改。

jsidiot 2002-06-11 02:09:03
xiexie
...全文
55 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
jsidiot 2002-06-20
  • 打赏
  • 举报
回复
谢谢诶
okcai 2002-06-18
  • 打赏
  • 举报
回复
----因为update就是先delete,然后insert
create trigger t_a_u on a
for update
as
declare
@rows int
select @rows=@@rowcount ---把@@rowcount记录下来,防止变化
if @@rowcount<1 return ---没有修改
if update(a1) --修改了第一个字段a1,你也可以判断其他的条件
begin
---update ....
if exists(select * from deleted) and @rows>=1 --修改以前的值
insert into b select D.a1,'Update Old' from deleted D
if exists(select * from inserted) and @rows>=1 --修改以后的值
insert into b select I.a1,'Update New' from inserted I
end
return
okcai 2002-06-18
  • 打赏
  • 举报
回复
----因为update就是先delete,然后insert
create trigger t_a_u on a
for update
as
declare
@rows int
select @rows=@@rowcount ---把@@rowcount记录下来,防止变化
if @@rowcount<1 return ---没有修改
if update(a1) --修改了第一个字段a1,你也可以判断其他的条件
begin
---update ....
if exists(select * from deleted) and @rows>=1 --修改以前的值
insert into b select D.a1,'Update Old' from deleted D
if exists(select * from inserted) and @rows>=1 --修改以后的值
insert into b select I.a1,'Update New' from inserted I
end
return
forestation 2002-06-17
  • 打赏
  • 举报
回复
updated
demiurge 2002-06-17
  • 打赏
  • 举报
回复
我很多update trigger都是这么写的

if update(flag)
begin
update sub_table set flag = i.flag
from sub_table a, deleted d, inserted i
where a.key = d.key
end
老吴子 2002-06-16
  • 打赏
  • 举报
回复
Sybase ASE 的Update触发器如果涉及更改了多行的情况下,Sybase建议返回错误,在实际运用过程中发现Deleted和Inserted相应纪录顺序一样,应而可以用游标来解决。另外如果是ASA,则具有行级的触发器。
jsidiot 2002-06-12
  • 打赏
  • 举报
回复
就这个答案?
demiurge 2002-06-11
  • 打赏
  • 举报
回复
if update(字段名)
update ......
jsidiot 2002-06-11
  • 打赏
  • 举报
回复
推一下
jsidiot 2002-06-11
  • 打赏
  • 举报
回复
如何通过判定一行中的某个字段发生更改后,去修改另一个标志字段?
就是这个意思
快来救我阿

2,596

社区成员

发帖
与我相关
我的任务
社区描述
Sybase相关技术讨论区
社区管理员
  • Sybase社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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