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

Posted

技术标签:

【中文标题】SQL Server - 将表中的某些列镜像到同一服务器上的另一个数据库,无需复制【英文标题】:SQL Server - mirror some columns from tables to another database on the same server without replication 【发布时间】:2014-08-16 01:47:07 【问题描述】:

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

所以我在源数据库上有一个 Staff 表 - 我只需要 staff_codeunique_id - 我有一个 Activity 表 - 我只需要 activity_codedescription 和 @987654327 @.. 等

解决此问题的最佳方法是什么 - 会是触发器吗?数据不会定期更新,可能每周更新一次 - 但如果可能的话,我仍然希望同步快一点?

源数据库中的数据可能会被另一个应用程序删除、更新或插入,因此我想确保我的数据库中的数据正确反映该信息。

感谢您的任何建议!

更新:表格比较示例:

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 ;

【问题讨论】:

【参考方案1】:

只要两个数据库可以连接(例如你能做一个SELECT * FROM SecondDB.dbo.Activity吗?),那我就直接

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

使用普通的SELECTINSERTUPDATE 和可能的DELETE 语句更新第二个数据库

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

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

【讨论】:

好吧,这听起来像是最好的方法——现在我写了一个小比较查询(在我上面的原始问题中发布),同步目标表的最佳实践是什么。截断并插入或执行有更新吗?

以上是关于SQL Server - 将表中的某些列镜像到同一服务器上的另一个数据库,无需复制的主要内容,如果未能解决你的问题,请参考以下文章

将表定义克隆到 SQL Server 中的表变量

MS SQL Server 中是不是有任何方法可以使用某种链接将表的一列映射到另一个数据库?

SQL Server:将列数据值从一个表复制到同一数据库中的另一个表

SQL中,如何将三个表中同一字段中的内容汇总到一个字段中?

SQL Server 删除触发器以更新同一表中的多个列

如何使用 SSMA(用于访问 SQL Server)将具有不同列的表迁移到现有表中?