积极答复者
SQL Server 2005 合并两个数据库

问题
答案
-
你首先要定义合并规则, 至少包括:
1. 要合并的对象类型及列表
2. 同名对象如何处理? 比如, 对于表同名, 如果结构一样, 假如是将数据合并到一齐, 但如果有相同数据又如何处理(相同数据的判断标准又是什么?)
在合并规则定义好的情况下, 才是决定如何合并, 简单的导只是处理表对象, 当存在对象名称冲突的时候, 没有合并规则就没有办法决定如何来导数据.
- 已标记为答案 Min-Hong Tang - MSFT 2010年8月18日 2:06
全部回复
-
1.如果没有相同的表和对象名称,这个最简单,直接用导入导出,将一个库的表全部导入过来,存储过程,视图等也可以通过脚本备份出来后,再在目标库上执行即可。
2.如果有相同的表或者对象,这个就需要有一个详细的迁移方案了,你需要将那些是可以合并,那些是要改名,那些是直接可以导入过来都标记好,然后分别写成脚本,然后在一个一个迁移。这个比较辛苦
3.还有一种情况,就是2个库结构一样,只是数据不一样,这个也不麻烦,和1类似,不同的是不需要导入对象(表等),麻烦的是你需要考虑是否有些表有重复数据(如果有约束),你需要把重复数据剔除后导入。
导入的方式,你可以将2个库都恢复到一个机器上或者使用连接数据库来完成。
迁移的如果涉及比较多的内容,可以使用SSIS来做。2005后这个已经很强大。
family as water -
你首先要定义合并规则, 至少包括:
1. 要合并的对象类型及列表
2. 同名对象如何处理? 比如, 对于表同名, 如果结构一样, 假如是将数据合并到一齐, 但如果有相同数据又如何处理(相同数据的判断标准又是什么?)
在合并规则定义好的情况下, 才是决定如何合并, 简单的导只是处理表对象, 当存在对象名称冲突的时候, 没有合并规则就没有办法决定如何来导数据.
- 已标记为答案 Min-Hong Tang - MSFT 2010年8月18日 2:06
-
如果2个库的表名字段都一样,只是表中的数据不同。可以用BCP将一个数据库中的所有数据导出,
导出的时候注意是本机格式导出还是字符型格式导出。
比如:计算机名:ABCD 数据库:DATABASE1 DATABASE2 需要将DATABSE1的数据导入到DATABASE2中。先将DATABASE1中的数据导出到D盘根目录,可以用下面的方法
SELECT REPLACE('bcp DATABASE1..#table_name# out D:\#table_name#.dat -n -q -SABCD -T -b3000', '#table_name#', name) AS cmd FROM sys.sysobjects WHERE (type = 'u')
执行后会产生DATABASE1库上面所有表的导出脚本 CMD方式下转到D盘执行脚本 在用同样的方式导入到DATABASE2上即可
凡人有庸俗的快乐,智者有高尚的痛苦