请问两个系统数据库之间想要做同步系统,如何有更新ID或是token可以判断?

作者站长头像
站长
· 阅读数 5

请问两个系统数据库之间想要做同步系统,如何有更新ID或是token可以判断?

目前需要在每个表格增加一个栏位叫更新ID,每次有更新时会去随机生成一个新的ID另外还要新增一个栏位叫更新日期,每次更新同时更新此日期

然后判断更新日期>=当日半夜12点 + 更新ID是否不一样假如True才去做此行数据的同步动作

请问原生sql server 是否有自带的隐藏栏位或是其它方式能做到?

询问过AI

请问两个系统数据库之间想要做同步系统,如何有更新ID或是token可以判断?

目前需要在每个表格增加一个栏位叫更新ID,每次有更新时会去随机生成一个新的ID
另外还要新增一个栏位叫更新日期,每次更新同时更新此日期

然后判断更新日期>=当日半夜12点 + 更新ID是否不一样
假如True才去做此行数据的同步动作

请问原生sql server 是否有自带的隐藏栏位或是其它方式能做到?



SQL Server 没有自带的隐藏栏位,但可以透过使用 ROWVERSION 或 TIMESTAMP 栏位来实现类似的功能。

ROWVERSION 是一个自动产生的二进位数据,每当一行资料被更新时,ROWVERSION 的值就会自动更新。您可以在同步时比较源和目标数据库的 ROWVERSION 值,如果不一样就进行同步操作。以下是一个示例:

plaintext
copy code
-- 在表格中新增 ROWVERSION 栏位
ALTER TABLE MyTable ADD RowVersion ROWVERSION

-- 比较源和目标数据库的 ROWVERSION 值
SELECT * FROM MyTable WHERE RowVersion > @LastSyncRowVersion
TIMESTAMP 是一个类似 ROWVERSION 的栏位,每当一行资料被更新时,TIMESTAMP 的值也会自动更新。您可以在同步时比较源和目标数据库的 TIMESTAMP 值,如果不一样就进行同步操作。以下是一个示例:

plaintext
copy code
-- 在表格中新增 TIMESTAMP 栏位
ALTER TABLE MyTable ADD MyTimestamp TIMESTAMP

-- 比较源和目标数据库的 TIMESTAMP 值
SELECT * FROM MyTable WHERE MyTimestamp > @LastSyncTimestamp
请注意,ROWVERSION 和 TIMESTAMP 栏位的值只在资料行更新时才会更新,因此如果只是修改了资料行中的其他栏位,而没有修改 ROWVERSION 或 TIMESTAMP 栏位,那么同步操作就不会被触发。另外,ROWVERSION 和 TIMESTAMP 栏位的值是二进位数据,不是日期或时间,因此不能直接比较大小,需要使用特定的函数进行比较。
回复
1个回答
avatar
test
2024-06-25

这个自定义程度太高了,要不使用触发器函数来是实现,要不使用代码来实现,会比较好调整与扩展

回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容