如何提取修改前后数据--存于一个日志表中

qq_38169185 2020-10-16 01:58:29
我有一个日记表log记录了students 表的所有的修改记录。
log表结构为:l_time l_user stu_no stu_name stu_a stu_b stu_c

students结构为:stu_no stu_name stu_a stu_b stu_c


要求查询出:l_time l_user change_Field old_value new_values



实际情况是students表中有50+列
有什么办法吗?


...全文
1044 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
wwfxgm 2020-11-04
  • 打赏
  • 举报
回复
引用 3 楼 qq_38169185 的回复:
我找到办法了,使用参数,拼接sql,代码减少了很多
请问楼主,这个具体是如何做的?
qq_38169185 2020-10-27
  • 打赏
  • 举报
回复
我找到办法了,使用参数,拼接sql,代码减少了很多
wwfxgm 2020-10-19
  • 打赏
  • 举报
回复
原来还有如此好的cdc啊。我一直用触发器呢。
ダ雨夹雪リ 2020-10-16
  • 打赏
  • 举报
回复


--了解一下CDC功能

--开启CDC
EXECUTE SYS.SP_CDC_ENABLE_DB 
EXEC SYS.SP_CDC_ENABLE_TABLE 'DBO','students',@ROLE_NAME = NULL,@SUPPORTS_NET_CHANGES =0


--查询操作日志
SELECT SYS.FN_CDC_MAP_LSN_TO_TIME ([__$START_LSN]) AS 时间, 
CASE [__$OPERATION] 
WHEN 1 THEN '删除' 
WHEN 2 THEN '新增'
WHEN 3 THEN '改前'
WHEN 4 THEN '改后'
END AS 操作类型,
*
FROM CDC.DBO_students_CT
 
--如果不需要了,关闭 
EXEC SYS.SP_CDC_DISABLE_TABLE 'DBO','students','ALL'
EXEC SYS.SP_CDC_DISABLE_DB
 

22,209

社区成员

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

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