请教一个关于SQL的触发器如何写!

yanjun0426 2005-09-08 11:58:55
请教大家,我在一个表bill里有一个字段ifupdate,我想记录当对bill表的资料进行修改和新增的时候把ifupdate置为1,在updatedate字段置为当前日期,应该如何写触发器,谢谢
目的是记录当前行数据是不是新增或者修改的数据,方便我更新到另一个数据库

...全文
145 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
machine123 2005-09-26
  • 打赏
  • 举报
回复
我也有一个相近的功能需求,关注中!!
请各位支持一下!
yanjun0426 2005-09-09
  • 打赏
  • 举报
回复
這樣啊
我如果一個標有50個字段那我怎麽寫,而其我有多個表都要這樣的功能,那不是每個字段都要比較啦
好多哦
有沒有更好的解決方案,謝謝大家
dongdong715 2005-09-08
  • 打赏
  • 举报
回复
create trigger tri_name on Table_name
for insert
as
begin
update Table_name set ifupdate=1,updatedate=getdate()
where Table_name.PK_id=PK_id

end
更新时的,没经过测试。
zjcxc 2005-09-08
  • 打赏
  • 举报
回复
create trigger tr_process on bill
for insert,update
as
if update(ifupdate) or updatedate(updatedate)
return
update a set ifupdate=1,updatedate=getdate()
from bill a, inserted i
where a.主键=i.主键
ShunJuan 2005-09-08
  • 打赏
  • 举报
回复
可以用游标测试是否有更新 如果有更新就执行操作 否则不执行操作
CREATE TRIGGER TRI_TEST ON [数据表]
FOR UPDATE
AS
IF UPDATE([字段])
BEGIN
DECLARE @INSERT CHAR(10) --新数据
DECLARE @DELETE CHAR(10) --原来的数据
DECLARE CUR_INSERT CURSOR
FOR SELECT 名称 FROM INSERTED
OPEN CUR_INSERT
FETCH NEXT FROM CUR_INSERT INTO @INSERT
CLOSE CUR_INSERT
DEALLOCATE CUR_INSERT
DECLARE CUR_DELETE CURSOR
FOR SELECT 名称 FROM DELETED
OPEN CUR_DELETE
FETCH NEXT FROM CUR_DELETE INTO @DELETE
CLOSE CUR_DELETE
DEALLOCATE CUR_DELETE
IF @INSERT <>@DELETE --比较是否有更新
-------------
--所要的操作--
-------------
END
GO
yanjun0426 2005-09-08
  • 打赏
  • 举报
回复
这样写可以,但是必须在条件那里把所有的字段加上更新前与更新后的比较,所以比较麻烦
update a set ifupdated=1,upddate=getdate()
from trade a, inserted i,deleted d where a.td_id=i.td_id
and i.td_id=d.td_id
and i.maker<>d.maker
。。。。。。

有没有其他的解决方案啊,请教各位大虾!!!
yanjun0426 2005-09-08
  • 打赏
  • 举报
回复
不行哦,如果执行了update 语句但是没有更新数据,也就是原数据不变的情况下也不能把ifupdate修改成1哦
yanjun0426 2005-09-08
  • 打赏
  • 举报
回复
請問在sql觸發器裏如何向本表本行的字段付值啊,像Oracle那樣

22,209

社区成员

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

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