如何在Azure SQL视图中定义rowversion适配Azure搜索服务变更检测
在Azure SQL视图中实现ROWVERSION高水位变更检测
首先,你需要确保关联的基础表(t1、t2、t3)各自都有ROWVERSION(或等价的TIMESTAMP,ROWVERSION是TIMESTAMP的同义词)类型的列。如果没有,先给每个表添加该列:
-- 给t1添加ROWVERSION列 ALTER TABLE t1 ADD RowVer ROWVERSION; -- 给t2添加ROWVERSION列 ALTER TABLE t2 ADD RowVer ROWVERSION; -- 给t3添加ROWVERSION列 ALTER TABLE t3 ADD RowVer ROWVERSION;
然后,在视图中,你需要获取关联行中最大的ROWVERSION值作为这条视图记录的变更标记——因为只要t1、t2、t3中任意一个表的对应行发生变更,对应的RowVer会自动更新,取最大值就能反映这条组合记录是否有变更。
修改你的视图定义如下(使用Azure SQL支持的GREATEST函数简化逻辑):
CREATE VIEW my_view AS SELECT t1.*, t2.*, t3.*, GREATEST(t1.RowVer, t2.RowVer, t3.RowVer) AS ViewRowVer FROM t1 JOIN t2 ON t1.[key] = t2.[key] JOIN t3 ON t1.[key] = t3.[key];
高水位标记的使用方式
当你需要检测变更时,只需记录上次同步时的最大ViewRowVer值,下次查询时筛选ViewRowVer > @LastMaxRowVer,就能获取所有自上次以来发生变更的记录。
注意:
- ROWVERSION是二进制类型,存储数据库全局递增的计数器,行插入或更新时自动更新,无需手动维护。
- 如果基础表已有TIMESTAMP/ROWVERSION列,直接使用现有列即可,无需重复添加。
内容的提问来源于stack exchange,提问作者Boris the Boris
相关产品推荐
相关产品推荐

