我需要将具有相同结构的20个数据库合并到一个数据库中。我看到这篇文章: Consolidate data from many different databases into one with minimum latency
我不明白这一切所以让我这样问:有一些表有主键,但没有sourceID,例如:
DataBase 1
AgencyID Name
1 Apple
2 Microsoft
数据库2
AgencyID Name
1 HP
2 Microsoft
很明显,这两个表不能像这样合并,它需要aditional专栏:
DataBase 1
Source AgencyID Name
DB1 1 Apple
DB1 2 Microsoft
数据库2
Source AgencyID Name
DB2 1 HP
DB2 2 Microsoft
如果这是正确的方法,可以将这两个表合并到一个数据库中,如下所示:
Source AgencyID Name
DB1 1 Apple
DB1 2 Microsoft
DB2 1 HP
DB2 2 Microsoft
......并且可以使用事务复制吗?
在此先感谢您的回答,如果我能得到正确答案,那将非常有用。
伊利亚·
答案 0 :(得分:2)
如果我理解正确,你可以通过
来做到这一点创建DTS / SSIS包。 这是basic SSIS tutorial。
或直接运行SQL
INSERT INTO [TargetDatabase].dbo.[MergedAgency]([Source], [AgencyID], [Name])
SELECT CAST('DB1' AS nvarchar(16)), [AgencyID], [Name]
FROM [SourceDatabase1].dbo.[Agency]
INSERT INTO [TargetDatabase].dbo.[MergedAgency]([Source], [AgencyID], [Name])
SELECT CAST('DB2' AS nvarchar(16)), [AgencyID], [Name]
FROM [SourceDatabase2].dbo.[Agency]
然后通过定期SQL Server Job 拨打一个Job Step和Schedule
不要忘记考虑如何检测哪些行已经复制到目标数据库。
答案 1 :(得分:1)
我解决了这个问题。现在我正在使用事务复制。在“发布属性>文章属性”中,我必须将“操作,如果名称正在使用”标记为“保持现有对象不变” 。默认为“删除现有对象并创建新对象”。 在SQL 2008中,即使我更改表格方案,这些更改也会应用于合并数据库。
答案 2 :(得分:0)
SQL-Hub(http://sql-hub.com)允许您将具有相同模式的多个数据库合并到一个数据库中。有一个免费许可证允许您从UI执行此操作,但如果您希望安排该过程自动运行,则可能需要为许可证付费。它比复制更容易使用 - 虽然效率不高。