如何记录更新时有变化的字段内容

marongc 2014-09-01 10:20:59
比如说:
我有一个员工表,工号是唯一的,作为更新的条件
但我现在可能只更新地址,其它内容和原来的一样
我想在另一个记录日志的日志表产生一条记录,就是记录某人在某时对某个员工进行地址更新

下次我可能更新手机号,其它内容和原来的一样
我这时也想在另一个记录日志的日志表产生一条记录,就是记录某人在某时对某个员工进行手机号更新

这个要怎么做呢
...全文
239 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
marongc 2014-09-01
  • 打赏
  • 举报
回复
引用 5 楼 jieweibin 的回复:
Declare @oldadd nvarchar(200),@newadd nvarchar(200) SELECT @oldadd=地址 FROM deleted SELECT @newadd=地址 FROM inserted if @oladd<>@newadd begin ...更新日志表 end
我大概有五六十个表,按你这样,好像工作量好大哦
jieweibin 2014-09-01
  • 打赏
  • 举报
回复
Declare @oldadd nvarchar(200),@newadd nvarchar(200) SELECT @oldadd=地址 FROM deleted SELECT @newadd=地址 FROM inserted if @oladd<>@newadd begin ...更新日志表 end
Tiger_Zhao 2014-09-01
  • 打赏
  • 举报
回复
程序中有 DataRow 之类的数据对象,按字段值比较啊。
marongc 2014-09-01
  • 打赏
  • 举报
回复
引用 1 楼 Tiger_Zhao 的回复:
程序和触发器都可以做。 不过程序中要显示,已经有了{address -> 地址, phoneNo -> 手机号}这类字段名到显示名的对应关系,在程序中做只要集中维护一处对应关系,比较方便。 程序中先记下编辑前记录,更新时逐个字段和当前值比较一下,就能知道哪些字段被修改了,记日志。 假如有多个表要记日志,程序基本上一个通用方法可以搞定的(只要给出字段名到显示名的对应关系),比每个表都要写触发器方便多了。
这个要怎么比较呢
jieweibin 2014-09-01
  • 打赏
  • 举报
回复
用 Update触发器: Create TRIGGER [dbo].[UpAdd] ON [dbo].[员工表] after update AS begin INSERT INTO 日志表(老地址) SELECT b.地址 FROM deleted b --把 老地址 插入到 日志表中的 老地址 字段中 INSERT INTO 日志表(新地址) SELECT d.地址 FROM inserted d --把 新地址 插入到 日志表中的 新地址 字段中 end
Tiger_Zhao 2014-09-01
  • 打赏
  • 举报
回复
程序和触发器都可以做。
不过程序中要显示,已经有了{address -> 地址, phoneNo -> 手机号}这类字段名到显示名的对应关系,在程序中做只要集中维护一处对应关系,比较方便。
程序中先记下编辑前记录,更新时逐个字段和当前值比较一下,就能知道哪些字段被修改了,记日志。
假如有多个表要记日志,程序基本上一个通用方法可以搞定的(只要给出字段名到显示名的对应关系),比每个表都要写触发器方便多了。

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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