我们在建设新项目的时候旧项目的一些数据可能需要copy到新的项目中,数据库不同的时候可能需要一些技巧,这里介绍从mysql向sqlserver数据库转存数据的方法,有更好方法的朋友希望能不吝赐教!
以下是实际项目中遇到的,提供给可能遇到的人简单的参考。
源数据库:mysql
目标数据库:MS sqlserver
本项目的处理方式是将mysql的数据先导入excel然后直观的对数据进行简单的整理,然后用sqlserver的dts工具将excel想要的列导入到目标数据库
1.将mysql数据库的内容导入到excel 2.利用ms sqlserver的dts工具将excel导入到指定数据库这里有比较好的microsoft的一篇文章介绍excel怎样实现导入ms sqlserver的情况,介绍的很详细。 http://support.microsoft.com/kb/321686/zh-cn ,excel导入sqlserver数据库(microsoft) 3.这里我先测试了是否可行,新建一个数据库进行测试,先将数据导入到测试数据库。然后在测试数据库中讲字段修改成需要的类型,类型要按照实际数据信息进行相应修改 4.现在可以通过表与表之间的数据导入将测试数据库的内容导入到目标数据库。
表与表之间的导入语句
insert into 目标数据库名.dbo.目标表 (数据列1, 数据列2) select 数据列1, 数据列2 from 源数据库名.dbo.源表名
这样就可以了, 数据列可以是多列, 要求两边对应就可以, 列名可以不一样 比如:目标表列名是a b 源表这边是 c d 只要类型一样就行我的执行执行语句为:(其中bitxyw是目标数据库,bitxy是测试数据库其中title、content、cateory_menu分别为标题、内容、菜单项)
insert into bitxyw.dbo.news (title, content, category_menu) select title, content, category_menu from bitxy.dbo.table_article
在实现数据库的转换之后可能还有一些问题是我们在实际中经常遇到的,我们将旧项目数据库内容成功导入之后,可能有些图片的路径与我们新项目的访问路径并不相同,需要我们做一定的修改。当字段的属性为text的时候sqlserver不能直接用replace函数进行操作,当然当小于8000字节的时候可以通过类型转换为varchar或nvarchar进行转换,大于8000的时候可以通过一下方法进行解决
SELECT * FROM news WHERE (1 = 1) ORDER BY category_menu = replace(convert(varchupdate news set contentar(8000), content), '要替换的字符', '替换成的值') tent = replace(n.contenupdate news n set n.cont, '/Upload', '/bitxyw/userfiles/image') where n.content is not null
可供参考的解决方案: text值大于8000时,在sqlserver如何进行字符的替换