我正在使用 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 分钟过时的想法。