将SQL Server数据库合并为1

时间:2011-07-13 11:12:04

标签: sql-server database merge consolidation

我需要将具有相同结构的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

......并且可以使用事务复制吗?

在此先感谢您的回答,如果我能得到正确答案,那将非常有用。

伊利亚·

3 个答案:

答案 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 StepSchedule

不要忘记考虑如何检测哪些行已经复制到目标数据库。

答案 1 :(得分:1)

我解决了这个问题。现在我正在使用事务复制。在“发布属性>文章属性”中,我必须将“操作,如果名称正在使用”标记为“保持现有对象不变” 。默认为“删除现有对象并创建新对象”。 在SQL 2008中,即使我更改表格方案,这些更改也会应用于合并数据库。

答案 2 :(得分:0)

SQL-Hub(http://sql-hub.com)允许您将具有相同模式的多个数据库合并到一个数据库中。有一个免费许可证允许您从UI执行此操作,但如果您希望安排该过程自动运行,则可能需要为许可证付费。它比复制更容易使用 - 虽然效率不高。