我在托管两个数据库的 VPS 上有一个 SQL Server 2012 Web Edition (11.0.5058.0) 实例。我想将 3 个表中的几列镜像到第二个数据库,但我没有安装事务复制。
所以我在源数据库中有一个 Staff
表 - 我只想要 staff_code
和 unique_id
- 我有一个 Activity
表 - 我只需要 activity_code
、description
和 unique_id
.. 等。
解决这个问题的最佳方法是什么 - 这是触发器吗?数据不会定期更新,可能每周更新一次 - 但如果可能的话,我仍然希望同步能够快速进行?
源数据库中的数据可能会被其他应用程序删除、更新或插入,因此我想确保数据库中的数据正确反射(reflect)该信息。
感谢您的建议!
更新:表比较示例:
SELECT CASE WHEN NOT EXISTS
( SELECT [COLUMN1],[COLUMN2],[UNIQUE_ID] FROM [SOURCE-DATABASE].[dbo].[SOURCE-TABLE]
EXCEPT
SELECT [COLUMN1],[COLUMN2],[UNIQUE_ID] FROM [DESTINATION-DATABASE].[dbo].[DESTINATION-TABLE]
)
AND NOT EXISTS
( SELECT [COLUMN1],[COLUMN2],[UNIQUE_ID] FROM [DESTINATION-DATABASE].[dbo].[DESTINATION-TABLE]
EXCEPT
SELECT [COLUMN1],[COLUMN2],[UNIQUE_ID] FROM [SOURCE-DATABASE].[dbo].[SOURCE-TABLE]
)
THEN 'True'
ELSE 'False' //GRAB NEW OR UPDATED DATA
END AS result ;
最佳答案
只要两个数据库可以连接(例如,您可以执行 SELECT * FROM SecondDB.dbo.Activity
吗?),那么我就可以
设置一个查询(独立或在存储过程中),仅检查源上的数据是否已更改
使用正常的
SELECT
、INSERT
、UPDATE
以及可能的DELETE
语句更新第二个数据库使用 SQL Server 代理作业设置该查询/存储过程以定期运行,例如每晚一次,每周一次 - 任何适合您的方式
我认为触发器在这里不是一个好的选择 - 触发器应该保持非常小、精简、快速 - 并且“复制”到另一个数据库听起来对于灵活的触发器来说处理工作太多......(也如果触发器需要很长时间才能完成,则调用应用程序将不得不等待整个时间......这对您的应用程序性能不利!)
关于SQL Server - 将表中的某些列镜像到同一服务器上的另一个数据库,无需复制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25336230/