数据库迁移,从Access导入到Sql Server需要注意哪些事项

欢欢欢欢 发表于 2016-11-21 11:38

前阵子由于数据访问量大,以及条件允许,将网站原来的Access数据库换成了Sql Server,记录下自己在换数据库的时候的一些步骤和心得。

切换之前大概想了协议爱,大概要涉及到这些地方:
 
换到sql server服务器上的步骤:
1,在C#代码层面上将所有Oledb切换到SqlParameter
2,分页公共方法的修改:原来access使用的分页方法虽说在Sql Server也能用,但是效率肯定不及Sql Server原生的ROW_NUMBER。
3,顶层的一些查询语句:原来可能会在业务层上写一些查询语句的片段,现在就不能用了,比如说Access的“是/否”字段,不能再设置为True/False,而要改成1/0了
4,测试
5,切换数据库(导入表结构数据,设置主键等)

在执行第5步时, 首先百度到的就是这篇文章,帮了大忙了:http://www.cnblogs.com/hnyei/archive/2012/05/29/2523728.html

本以为可以很轻松的搞定,但是在实际操作的时候还是遇到了问题:

需求:

1,历史数据的主键不能更改,这个涉及到Seo,如果ID改了好多被百度收录的内容就没有了

2,导入数据的时候能尽可能的简单,尽量下一步下一步的操作而不产生大量的体力劳动

3,发布时间不能太长,将网站访问异常的时间尽量缩短。

问题:

1,Sql Server在导入数据的时候,会自动将表结构带过来,但是自增长,主键和字段默认值是不会带过来的!!!!

解决方案:

如果要带自增长键,必须要一个表一个表设置,而且这种设置还不能保存成脚本,只对本次导入有效!显然这种方式是不可行的,因为我不能一次导入成功,肯定要实验很多次,如果每次都这样设置会非常麻烦。看来只能写脚本了,毕竟可反复执行!

写脚本的话,主键和默认值很好写,如下

alter table dra_DramaVer
add CONSTRAINT PK_dra_DramaVer PRIMARY KEY CLUSTERED 
(
ID
)
GO
ALTER TABLE [dbo].[dra_DramaVer] ADD  CONSTRAINT [DF_dra_DramaVer_ShowOrder]  DEFAULT ((0)) FOR [ShowOrder]
GO
但是让主键自增长就难了!!百度了半天,最后得出的结论是:一个表一旦建好了,将某个字段改为自增长唯一的方式就是将这个字段删掉,然后重新新建,这在我目前这种需求下是不能被接受的,那样的话历史数据的主键字段就会全部被重置,违背了需求1。
最后不得已,只能在导入完数据之后,一个一个表的编辑,将主键的自增长加上。
这就是这次导入数据的全部经验,写出来希望和大家探讨出更好的方案。