請問兩個系統數據庫之間想要做同步系統,如何有更新ID或是token可以判斷?
目前需要在每個表格增加一個欄位叫更新ID,每次有更新時會去隨機生成一個新的ID
另外還要新增一個欄位叫更新日期,每次更新同時更新此日期
然後判斷更新日期>=當日半夜12點 + 更新ID是否不一樣
假如True才去做此行數據的同步動作
請問原生sql server 是否有自帶的隱藏欄位或是其它方式能做到?
詢問過AI,好像沒有:
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 欄位的值是二進位數據,不是日期或時間,因此不能直接比較大小,需要使用特定的函數進行比較。
可以的,發行者可以指定那些物件要散發給訂閱者,不只是Table,一個大Table裡您可以下SQL指令撈特定的資料發佈(Ex.只讓分公司訂閱該分公司的資料,當然您Table裡要有欄位可識別那那家分公司的資料),您可以參考以下連結:
https://learn.microsoft.com/zh-tw/sql/relational-databases/replication/publish/publish-data-and-database-objects?view=sql-server-ver16
謝謝您!
大大人真的太好了XD
如果沒有即時的要求。不如 dump/restore
Table的發布與訂閱,可能是你要的。而且還接近即時更新。
SQL查關鍵字好像有方法但我沒用過,我是玩PostgreSQL比較多,PG有這功能。