如何查询索引视图中发生变更的记录?
索引视图变更查询实现方案
以下是几种可直接落地的实现方法:
- 开启SQL Server内置变更跟踪(Change Tracking)
这是轻量追踪数据变更的首选方案,你只需要先对当前数据库开启变更跟踪功能,再对invoice details基表、以及你创建的索引视图分别开启变更跟踪即可。后续需要拉取变更时,直接调用变更跟踪相关的内置函数,就能拿到所有发生变更的行对应的productid,还能获取到对应变更的操作类型(新增/修改/删除),该功能对原有业务性能影响极小,非常适合跨端同步余额的场景。 - 基表加触发器写入自定义变更日志
在invoice details表上创建AFTER INSERT/UPDATE/DELETE触发器,每次发票数据录入触发数据变更时,触发器自动将涉及到的productid写入你提前创建的变更日志表中。另一台终端只需要轮询这个轻量的日志表,就能快速拿到所有余额发生变动的产品ID,处理完变更后可以按需清理日志表的历史数据,逻辑完全自定义,不需要开启数据库额外功能。 - 启用变更数据捕获(Change Data Capture, CDC)
如果你不仅需要知道哪些产品的余额发生了变更,还需要获取变更前后的quantity具体值、操作时间等完整变更历史,可以选择开启CDC功能,该功能会自动记录基表的所有变更明细,你可以直接读取CDC捕获的日志表获取变更信息,缺点是比变更跟踪的性能损耗略高,适合需要完整变更审计的场景。
注意:不建议直接轮询索引视图对比数据判断变更,数据量较大时会产生很高的性能开销,优先选择上述三种方案。
内容的提问来源于stack exchange,提问作者Attaf
相关产品推荐
相关产品推荐

