iT邦幫忙

0

請問兩個系統數據庫之間想要做同步系統,如何有更新ID或是token可以判斷?

  • 分享至 

  • xImage

請問兩個系統數據庫之間想要做同步系統,如何有更新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 欄位的值是二進位數據,不是日期或時間,因此不能直接比較大小,需要使用特定的函數進行比較。
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
6
一級屠豬士
iT邦大師 1 級 ‧ 2023-10-23 10:05:46
最佳解答
看更多先前的回應...收起先前的回應...
小MIS iT邦研究生 1 級 ‧ 2023-10-23 10:53:20 檢舉

您好,SQL Server 複寫,好像是針對DB沒辦法指定單Table
不知是否我理解錯誤

sam0407 iT邦大師 1 級 ‧ 2023-10-23 13:37:58 檢舉

可以的,發行者可以指定那些物件要散發給訂閱者,不只是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

小MIS iT邦研究生 1 級 ‧ 2023-10-23 14:59:18 檢舉

謝謝您!

whitefloor iT邦研究生 2 級 ‧ 2023-10-23 18:10:13 檢舉

大大人真的太好了XD

1
MatthewWangUS
iT邦新手 3 級 ‧ 2023-10-23 09:49:47

如果沒有即時的要求。不如 dump/restore

sam0407 iT邦大師 1 級 ‧ 2023-10-23 14:05:27 檢舉

如果不需要即時,又只是幾個Table,也可以考慮用SQL Server的SSIS排程來作比較簡單

1
DennisLu
iT邦研究生 1 級 ‧ 2023-10-23 13:33:29

Table的發布與訂閱,可能是你要的。而且還接近即時更新。
SQL查關鍵字好像有方法但我沒用過,我是玩PostgreSQL比較多,PG有這功能。

看更多先前的回應...收起先前的回應...
小MIS iT邦研究生 1 級 ‧ 2023-10-23 14:59:07 檢舉

謝謝您,有 trigger,但是這改動DBA不准許
羡慕Postsql!

DennisLu iT邦研究生 1 級 ‧ 2023-10-23 16:22:21 檢舉

問一下?
"當日半夜12點 + 更新ID是否不一樣"
看你敘述的需求不就是日轉嗎? 日轉需要檢查是否更新嗎?
過了12點,跟昨天有關的資料就不會再新增了,
時間過去就是過去了。即使日0筆跑一遍也沒影響吧。
DB job或是OS 排程 sql script 就行了吧。
還是沒有可以判斷日期的欄位?

小MIS iT邦研究生 1 級 ‧ 2023-10-23 20:47:47 檢舉

有可能會更新多天以前數據

DennisLu iT邦研究生 1 級 ‧ 2023-10-23 23:15:29 檢舉

如果主鍵是連續數字就很好定位從哪開始吧?

小MIS iT邦研究生 1 級 ‧ 2023-10-24 08:26:33 檢舉

您好,PK是UUID

我要發表回答

立即登入回答