SQL Server - 将表中的某些列镜像到同一服务器上的另一个数据库,无需复制

标签 sql sql-server triggers replication

我在托管两个数据库的 VPS 上有一个 SQL Server 2012 Web Edition (11.0.5058.0) 实例。我想将 3 个表中的几列镜像到第二个数据库,但我没有安装事务复制。

所以我在源数据库中有一个 Staff 表 - 我只想要 staff_codeunique_id - 我有一个 Activity 表 - 我只需要 activity_codedescriptionunique_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 吗?),那么我就可以

  • 设置一个查询(独立或在存储过程中),仅检查源上的数据是否已更改

  • 使用正常的SELECTINSERTUPDATE以及可能的DELETE语句更新第二个数据库

  • 使用 SQL Server 代理作业设置该查询/存储过程以定期运行,例如每晚一次,每周一次 - 任何适合您的方式

我认为触发器在这里不是一个好的选择 - 触发器应该保持非常小、精简、快速 - 并且“复制”到另一个数据库听起来对于灵活的触发器来说处理工作太多......(也如果触发器需要很长时间才能完成,则调用应用程序将不得不等待整个时间......这对您的应用程序性能不利!)

关于SQL Server - 将表中的某些列镜像到同一服务器上的另一个数据库,无需复制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25336230/

相关文章:

sql-server - 尝试部署 Entity Framework 代码优先应用程序但运气不佳?最佳部署策略?

c# - 带有 Instead Of 触发器的 Entity Framework

sql - 使用 1 个查询对 ActiveRecord 中的对象进行计数和选择

java - PostgreSQL 异常 : syntax error

c# - 每次加载页面时随机显示三个不同的问题

c# - 哪一种是在 SQL Server 中复制数据库的最佳方法?

javascript - 在实际更改选择框之前获取 onChange 值

php - rethinkDB 中的 MySQL 触发器等效项

mysql - 查找过去 24 小时内具有日期字段的记录

sql - 如何仅选择那些具有多个具有值的给定字段的行