嗨,我正在尋找一個解決方案 更新表1中的值只有當值更改。我的意思是比較tableb,只更新已更改的值SQL服務器比較表,並更新(如果更改)
回答
您可以在源表上使用更新目標表的觸發器。
但是,如果有很大的音量可能會減慢插入/更新源相當糟糕。在這種情況下,我會將觸發器插入第三個表中。然後,計劃作業可以處理該表並刪除記錄(當然,適當使用事務處理)。
一種完全不同的方法是將觸發向上移動到應用程序中,並使用基於消息的方法。在這種情況下,你可以得到兩全其美的好處,因爲偵聽消息的進程將盡可能快地處理它們,從而實現對目標表的幾乎實時更新。
所以你可以吃你的蛋糕,並吃掉它。
到尼爾斯解決方案的一個替代方案是使用binary checksum並存儲在一個領域中的表,然後比較針對
不是說了一個更好的解決方案,只是給你一些選項。
是的,一個更簡單的方法。如果負載很高,那麼最終可能成爲源表上鎖定問題的來源,而讀取它的過程確實是這樣。另外,當它實際上並不是表中數據的一部分時,通過添加這個信息來污染源表的數據模型。 – 2009-09-25 15:01:38
尼爾,污染數據模型? 一個設計良好的數據庫通常包含的字段不能被用戶看到,因此不在數據模型中。有用於管理數據而不是信息的字段。比如創建記錄的日期和最後一次更新行的人。 如果你已經正確地編寫了你的應用程序代碼來只提取你想要的數據,而不是所有的(因爲其他原因你應該這樣做),這是沒有問題的。如果你使用select *(這不應該在生產數據庫上完成),那麼這是一個問題。 – HLGEM 2009-09-25 17:42:21
這可以工作,並且比加入記錄中的每個表更快。在記錄創建和更新時創建和更新這個比在運行時嘗試計算10,000,000個binary_checksums更好。 – HLGEM 2009-09-25 17:43:38
在一次嘗試多行:
UPDATE a
SET IntCol=b.IntCol
,varcharCol=b.varcharCol
,DatetimeCol=b.DatetimeCol
FROM TableA a
INNER JOIN (SELECT pk,IntCol,varcharCol,DatetimeCol FROM TableA
EXCEPT
SELECT pk,IntCol,varcharCol,DatetimeCol FROM TableB
) dt ON a.pk=dt.pk
- 1. SQL:比較表數據,並更新表
- 2. SQL服務器更新列比較橫行的值
- 3. 比較2個mysql表並只更新已更改的記錄
- 4. Infopath - 更改sql服務器
- 5. SQL服務器:比較NULL
- 6. 比較數據表和合並更改
- 7. 更改SQL服務器快速表名
- 8. SQL服務器(更新)
- 9. 更新SQL服務器
- 10. 更新列SQL服務器
- 11. SQL服務器更新
- 12. 比較兩個sql服務器表
- 13. SQL服務器 - 更新錶的歷史
- 14. 比較表並標識新的或更改的字段
- 15. 併發問題,當更新sql服務器表列
- 16. 比較舊值與新值並更新
- 17. Java更改比較
- 18. SQL服務器 - 插入如果不存在其他更新
- 19. 如何更新,直到在SQL服務器改值的列
- 20. SQL服務器更新觸發器,獲得前場和更新
- 21. 更改github差異並列比較?
- 22. 如果表內容更改,更新RowSet?
- 23. 更改SQL服務器兼容級別
- 24. 更改SQL服務器本地名稱
- 25. 更改sql服務器中的列
- 26. sql服務器狀態更改時間
- 27. SQL服務器更改通知和SqlDependency
- 28. SQL服務器 - 日期比較
- 29. 比較多個條件SQL服務器
- 30. sql服務器遊標比較
STOP - ** **觸發時間... :) – 2009-09-25 14:55:46
多久你想表同步? – 2009-09-25 14:57:02
對於一次性任務或定期?看看Redgate的比較工具,如果你想使用一個工具來做到這一點。 – RichardOD 2009-09-25 14:58:30