我有2分表上的SQL Server 2008 R2在同一台服务器上的2名不同的数据库相同的模式。 一个表获取与数据更新频率也更高。
现在有必要保留这些2台同步。 这可能发生,作为夜间处理过程。 什么是实现同步的最好方法。 过程?
我有2分表上的SQL Server 2008 R2在同一台服务器上的2名不同的数据库相同的模式。 一个表获取与数据更新频率也更高。
现在有必要保留这些2台同步。 这可能发生,作为夜间处理过程。 什么是实现同步的最好方法。 过程?
使用合并是最好的选择。 您可以控制每一个条件。 WHEN然后再配,当不匹配的THEN等。
MERGE -的Technet
MERGE- MSDN(GOOD!)
实施例A:事务用法-表变量- NO
DECLARE @Source TABLE (ID INT)
DECLARE @Target TABLE (ID INT)
INSERT INTO @Source (ID) VALUES (1),(2),(3),(4),(5)
BEGIN TRANSACTION
MERGE @Target AS T
USING @Source AS S
ON (S.ID = T.ID)
WHEN NOT MATCHED THEN
INSERT (ID) VALUES (S.ID);
ROLLBACK TRANSACTION
SELECT 'FAIL' AS Test,*
FROM @Target
实施例B:事务用法-物理表
CREATE TABLE SRC (ID INT);
CREATE TABLE TRG (ID INT);
INSERT INTO SRC (ID) VALUES (1),(2),(3),(4),(5)
BEGIN TRANSACTION
MERGE TRG AS T
USING SRC AS S
ON (S.ID = T.ID)
WHEN NOT MATCHED THEN
INSERT (ID) VALUES (S.ID);
ROLLBACK TRANSACTION
SELECT 'FAIL' AS Test,*
FROM TRG
例如C:事务使用-临时数据库(本地和全球)
CREATE TABLE #SRC (ID INT);
CREATE TABLE #TRG (ID INT);
INSERT INTO #SRC (ID) VALUES (1),(2),(3),(4),(5)
BEGIN TRANSACTION
MERGE #TRG AS T
USING #SRC AS S
ON (S.ID = T.ID)
WHEN NOT MATCHED THEN
INSERT (ID) VALUES (S.ID);
ROLLBACK TRANSACTION
SELECT 'FAIL' AS Test,*
FROM #TRG
你也许可以使用SQL Server的tablediff.exe命令行工具。 它可以做表的表,一次性的两个表之间的比较,并自动生成SQL为你同步的DEST到源。
还有它周围的GUI包装http://code.google.com/p/sqltablediff/这使得工作更加容易。 它会为你的命令行。
然后,您可以创建计划任务运行的命令行,然后执行生成的SQL脚本。
您可以从不同的数据库中选择和使用游标循环中选择的数据。 内的光标,你可以做一些逻辑和更新,或者从目标表中删除。
此外SQL 2008有,你可以使用一个T-SQL查询来选择/插入/更新一个不错的新的MERGE语句。 http://technet.microsoft.com/en-us/library/bb510625%28v=sql.105%29.aspx
对于更复杂的过程,我使用的第一个选项。 为了更直接同步任务我使用第二个选项。
作为一个额外的选项也有Server集成服务(SSIS): http://blogs.msdn.com/b/jorgepc/archive/2010/12/07/synchronize-two-tables-using-sql-server-integration-服务- SSIS部分-I-的-ii.aspx