在SQL Server 2008中将多个数据库合并成多个模式的单个数据库

我在一个SQL Server 2008实例中有五个小型数据库。 数据库是相关的(由业务实体,但不是数据),所以我想合并成一个单一的数据库,并给每个自己的架构在该数据库。

其实,我想主数据库保持dbo架构。 最初我通过在主数据库中创build模式开始,然后在我想要移动的第一个数据库中为表创build结构,然后运行插入/select查询来迁移数据。 我很好,但这是很耗时间,我甚至还没有得到存储过程。 加上其中一个数据库依赖于loggingID,只是做一个插入/select将会抛出。

当然有一个更简单的方法来做到这一点。

我不是DBA,但是我很乐意在SSMS中使用查询等。 我正在开发一个开发服务器,而且我是唯一一个更新数据的人,所以如果出现问题,我总是可以从生产服务器上恢复。 任何指针将不胜感激。

我find了一个解决scheme,我会在这里发布,以防其他人在未来寻找这个。 我不能说这是做这件事的最好方法,但是对我来说这是有效的,而且是相对无痛的。 当我第一次问这个问题(一两个星期前)时,我还会向前透露,我在主数据库中创build了新的模式,所以我真的不知道这一步是否必要。

我为每个数据库重复这个过程。

  1. 为数据库创build一个唯一的模式名称。

  2. 对数据库中的每个表进行以下查询:

    ALTER SCHEMA [new_schema_name] TRANSFER [table_name];

  3. 使用SSMS为所有视图,存储过程,触发器和函数生成CREATE脚本。 (幸运的是我没有这些,所以这很快)。我不得不将模式名添加到所有表引用(例如[dbo].[table_name]更改为[new_schema_name].[table_name]但search和replace这个快速和容易。

  4. 使用“SQL Server导入和导出向导”将数据库中的表导出到主数据库。

  5. 运行CREATE脚本并删除旧的数据库。

看看RedGate的SQL比较 。 它可能可以处理你要找的东西,或者至less让你更接近。 这不是免费的,但你可以评估它,看看它是否会工作。 恕我直言,这是值得的$$(所有的工具)。

至于ID,有一个声明来设置ID。 重新authentication我相信的身份。 我第二次redgate比较/数据cpare捆绑 – 岩石。

我不明白你为什么要这样做。 这将使您备份和恢复所有的对象在同一时间。 你也将不得不重构你的应用程序代码。 你看到这样做有什么好处?

我最近必须(select)将两个没有意义重叠的小数据库合并到一个数据库中。 目标数据库中的目标表不存在预查询。

我做了一些类似于OMG Ponies提供的答案

 SELECT * INTO [NEW_DATABASE].dbo.[TABLE] FROM [OLD_DATABASE].dbo.[TABLE] 

因为只有一个SQL Server实例,并假设没有重叠 – 您可以使用:

 SELECT * INTO [NEW_DATABASE].dbo.[TABLE] FROM [OLD_DATABASE].dbo.[TABLE] 

在运行语句之前,新数据库中的表不能存在,但它会带来数据。