需要一个触发器来记录某个字段的更改情况!

沐NeMo 2011-11-04 10:04:56
有一个表:tblFiber
主键:strLotNumber 字符串类型,(还有很多字段)。还会用到这个表的另外一个lngModifiedUserID字段。

需要一个触发器来记录主键更改情况(会在程序判断主键是否有重复的)。

记录到另外一个表里面:tblFiberChanged(更改记录表)
lngAutoID,strLotNoOLD,strLotNoNew,lngModifiedUserID,dtmModified
自动ID,原来编号,新编号,修改用户,修改时间。

请大家帮忙!谢谢!
...全文
249 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
沐NeMo 2011-11-04
  • 打赏
  • 举报
回复
在程序中测试过,可以了。
谢谢roy_88,也谢谢大家!
CREATE TRIGGER [trgLotNoChangeLog] ON [dbo].[tblFiber]
FOR UPDATE
AS
IF @@ROWCOUNT>1 AND UPDATE(strLotNumber)
BEGIN
RAISERROR 50001N'多條更改'
ROLLBACK TRAN
RETURN
END
--以下自己加上列名
INSERT INTO tblFiberChanged
SELECT d.strLotNumber AS strLotNoOLD,i.strLotNumber AS strLotNoNEW,i.lngModifiedUserID,GetDate()
FROM INSERTED AS i,DELETED AS d

刚刚去学习触发器的相关内容:http://blog.csdn.net/a9529lty/article/details/6134226
沐NeMo 2011-11-04
  • 打赏
  • 举报
回复
先谢谢大家!
strLotNumber 应该是不可以重复的。这个不是用来连接用的。我的连接是用另外一个ID字段。
中国风 2011-11-04
  • 打赏
  • 举报
回复

CREATE TRIGGER tr_tblFiber ON tblFiber
FOR UPDATE
AS
IF @@ROWCOUNT>1 AND UPDATE(strLotNumber)
BEGIN
RAISERROR 50001N'多條更改'
ROLLBACK TRAN
RETURN
END
--以下自己加上列名
INSERT INTO tblFiberChanged
SELECT d.strLotNumber AS strLotNoOLD,i.strLotNumber AS strLotNoNew
FROM INSERTED AS i,DELETED d
--小F-- 2011-11-04
  • 打赏
  • 举报
回复
主键应该是很少更改的 经常用到的列。
-晴天 2011-11-04
  • 打赏
  • 举报
回复
create trigger updatePK
on tblFiber
after update
as
begin
if update(strLotNumber)
insert into tblFiberChanged
select a.strLotNumber,b.strLotnumber,CURRENT_USER,getdate()
from deleted a inner join inserted b on a.col2=b.col2 and a.col3=b.col3 and a.col4=b.col4 and .... --因为主键被修改了,所以要用其他能代表该行的列来对比.
end
gw6328 2011-11-04
  • 打赏
  • 举报
回复
create trgger tr_name on tblFiber
for update
as
begin
if Update(主键)
insert into 记录表 select a.xx,b.xx ... from deleted a join inserted b on 条件
end
NBDBA 2011-11-04
  • 打赏
  • 举报
回复
主健可更改,需要另一个不修改的唯一索引作为连接条件,否则最好不要用触发器了,在程序记录日志。

中国风 2011-11-04
  • 打赏
  • 举报
回复
如果是SQL2005用存儲過程

OUTPUT 子句 實現
中国风 2011-11-04
  • 打赏
  • 举报
回复
主健可更改最好不做主健,建一下唯一約束或索引
快溜 2011-11-04
  • 打赏
  • 举报
回复
create trgger tr_name on tblFiber
for update
as
begin
insert into 记录表
select strLotNo from deleted,
select strLotNo from inserted,
--人从哪来?
getdate()
end

34,594

社区成员

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

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