日期:2014-05-17  浏览次数:20539 次

2个数据库同步的问题!
假设我现在有2个数据A、B,现在我想做的是,把A数据库里面的表、触发器、存储过程及数据都导入的数据库B中(这里是有判断的:导入的这些内容是B数据库里面没有的才进行导入)!别再说什么分离、附加的,因为数据库B中有很多内容都是我需要的,希望各位大神帮忙,谢谢,或者推荐工具!
------解决方案--------------------
看上去象是客户的数据库很久没升级了,而楼主没有升级脚本

------解决方案--------------------
引用:
看上去象是客户的数据库很久没升级了,而楼主没有升级脚本
几年前的客户了,客户的版本跟现在的差很多,现在客户又要继续扩展需求,只能硬着头皮升级了!
------解决方案--------------------
把A库的脚本生成出来,直接在B库执行,记得生成if判断是否存在的那些
------解决方案--------------------
MSSQL2008版本:
对于各种数据库对象,比如架构、表、存储过程、触发器、视图等,都可以右键数据库,选择任务——生成脚本,然后按照弹出的对话框进一步操作,其中在第三部:设置脚本编写选项那里,可以选择“高级”进行设置。然后选择“保存到新建查询窗口”。
接下来一步最重要:所有的对象创建语句前,都手动添加一个判断,比如存储过程添加这样的判断——

--判断是否存在myProc这个存储过程
If not exists (select * from dbo.sysObjects where id = Object_Id(N'myProc') 
and ObjectProperty(id, N'IsProcedure') = 1)
BEGIN
    导出来的创建myProc这个存储过程的脚本
END
其他的类似这样:
[code=sql]
判断myTalbe对象是否是一个表。
If exists (select * from dbo.sysObjects where id = Object_Id(N'myTable') and ObjectProperty(id, N'IsUserTable') = 1)
判断myProc对象是否是一个存储过程。
If exists (select * from dbo.sysObjects where id = Object_Id(N'myProc') and ObjectProperty(id, N'IsProcedure') = 1)
判断myFun对象是否是一个自定义、标量值函数。
If exists (select * from dbo.sysObjects where id = Object_Id(N'myFun') and ObjectProperty(id, N'IsScalarFunction') = 1)
判断myFun对象是否是一个表值函数。
If exists (select * from dbo.sysObjects where id = Object_Id(N'myFun') and ObjectProperty(id, N'IsTableFunction') = 1)

至于数据,这个就更复杂了,需要考虑到表是否有自增字段,各种约束等等,只能一张表一张表去具体分析了。
------解决方案--------------------
引用:
把A库的脚本生成出来,直接在B库执行,记得生成if判断是否存在的那些
貌似这个有点繁琐啊
------解决方案--------------------
引用:
MSSQL2008版本:
对于各种数据库对象,比如架构、表、存储过程、触发器、视图等,都可以右键数据库,选择任务——生成脚本,然后按照弹出的对话框进一步操作,其中在第三部:设置脚本编写选项那里,可以选择“高级”进行设置。然后选择“保存到新建查询窗口”。
接下来一步最重要:所有的对象创建语句前,都手动添加一个判断,比如存储过程添加这样的判断——
SQL code123……
这个不是把人搞死,我是说,能否自动根据A数据库的内容写判断语句,然后执行!
------解决方案--------------------
这个用第三方软件可能可以实现:redgate。不过要钱。