如何从另一个数据库更新一个数据库?

use*_*erA 5 sql-server

我正在使用 SQL Server 2008。我有两个名为Adb和 的数据库Bdb。有一个公用表叫做commonTable. 如何Adb使用 中同一个表中的数据每 15 分钟更新一次数据库Bdb

Aar*_*and 10

没有更多细节:

CREATE PROCEDURE dbo.UpdateA
AS
BEGIN
  SET NOCOUNT ON;

  UPDATE A 
    SET col1 = B.col1 /* , ... */
    FROM Adb.dbo.commonTable AS A
    INNER JOIN Bdb.dbo.commonTable AS B
    ON A.key_col = B.key_col;

  INSERT Adb.dbo.commonTable(key_col, col1 /* , ... */)
    SELECT key_col, col1 /* , ... */
    FROM Bdb.dbo.commonTable AS B
    WHERE NOT EXISTS (SELECT 1 FROM Adb.dbo.commonTable
      WHERE key_col = B.key_col);

  DELETE A
    FROM Adb.dbo.commonTable AS A
    LEFT OUTER JOIN Bdb.dbo.commonTable AS B
    ON A.key_col = B.key_col
    WHERE B.key_col IS NULL;
END
GO
Run Code Online (Sandbox Code Playgroud)

现在使用SQL Server 代理作业每 15 分钟安排一次该存储过程。

隔离、并发、错误处理等都是额外的考虑因素,但如果这是唯一写入Adb. 您也可以考虑使用更简洁的MERGE命令,但语法令人生畏,而且它在提高并发性和消除竞争条件方面的收益低于您的预期。

您可能还想考虑事务复制- 摆脱这种必须手动执行任何操作的概念,以及数据可能最多 15 分钟过时的想法。