正 文:
虽然说Access数据库是一种比较古老的数据库,但是不可否认的是,Access数据库在国内轻量级应用上还是有不少拥泵的,理由很简单:Access轻量、简单、便携,可直接复制粘贴到其他主机上,在做程序分发的时候非常便捷。
但是,ACCESS数据库毕竟是微软为轻量级应用设计的一种简单数据库,当我们的数据量大了之后,就要考虑升级更高级的 MSSQL 数据库了,比如升级到 mssql2000,mssql2005,mssql2008等。由mssql2000升级到高版本的mssql,很方便,所以,飘易在这篇文章里就不提mssql不同版本之间的升级了。只讨论ACCESS升级到mssql2000的方法和需要注意的地方。
本文将和大家分享三大块:
一、access数据库转化成mssql2000;
二、sql2000在不同的主机之间转移;
三、mssql中如何修改表的所有者。
先说第一部分:access数据库转化成mssql2000一、转换过程:
1、安装“SQL SERVER 2000企业版”,这个教程网上比较多,可以借鉴学习下,我们在这里就不多阐述了。
2、打开“控制面板”下“管理工具”中的“数据库源”; 按“添加”添加一个新的数据源,在选择栏里选”Driver do microsoft Access (*.mdb)”,完成后将出现一个框(如果已经添加有此数据源或安装了MS ACCESS软件,则跳过;)
3、打开SQL2000企业管理器,进入数据库,新建一个空的数据库“ACThink”;
4、打开“安全性”,右击登录,选择“新建登录”。
5、设置如下:登录“名称”为“acthink”,使用“WINDOWS 身份验证“指用自己的系统管理员身份操作,“SQL身份操作验证“可以用于网站的操作,推荐用后者;密码为"acthink!@#$”,密码可以自由设置,建议使用安全性较高的密码;“数据库”选择“acthink”,语言选择“默认”。 这样数据库的登录用户名和密码就设置好了。
6、右击“AcThink”登录,进入“属性”,设置如下:许可用户acthink访问AcThink,数据角色允许“db_ower”和“Public”。
7、选择刚才新建立的数据库AcThink,按鼠标右键,选择“所有任务”下“导入数据”,按“下一步”继续;在数据库源下拉但中选择”Microsoft Access(*.mdb)”,在“文件名”中,浏览找出你要准备转换的ACCESS数据源.MDB文件,用户名和密码留空,按 ”下一步”;
8、“目的”不需要修改,选择服务器(一般下为自己的本机“local“,也可以选择服务器地址或者局域网地址,确定你的权限是否可以操作),选择“使用SQL身份操作验证”。
9、选上“使用SQL身份操作验证“后,填写我们刚才新建的登录的用户名acthink和密码acthink!@#$,数据库选择刚新建的“AcThink”,按“下一步”;
10、这一步的两个单项选择,“从数据源复制表和视图”与“用一条查询指令指定要传输的数据“,选择前者,按“下一步“继续;
11、这里将出现你自己ACCESS数据库的表,按“全选”后,“下一步”;
12、“DTS导入/导出向导“,看“立即运行“被选中,按“下一步”;
13、按“完成“继续”;
14、这个步骤你将看到你的数据被导入SQL2000里面,当出现“已经成功把XXX个表导入到数据库“的字样,而且所有的表前面都有绿色的勾,就表示成功导入所有数据;如果中途出现问题或者表前面有红色的叉的话,说明该表没有成功导入,这时就要回去查看自己的操作是否正确了。
二、ACCESS改为SQL需要注意哪几个地方
(1)由于SQL2000里面没有“自动编号“,所以以“自动编号“设置的字段都会变成非空的字段,这就必须手工修改这些字段,并把它的“标识”选择为“是”,种子为“1”,增量为“1”。
(2)另外,ACCESS2000转换成SQL2000后,原来属性为“是/否”的字段将被转换成非空的“bit”,这时候必须修改成自己想要的属性了,比如变为1/0。
(3)转化时,跟日期有关的字段,SQL SERVER默认为smalldatetime型,我们最好将它变为datetime型,因为datetime型的范围比smalldatetime型大。有时用smalldatetime型时,转化失败,而用datetime型时,转化成功。
所有字段默认值如果是 now(),time(),date()要改成getdate()。
日期函数不相同,在对ACCESS数据库处理中,可用date()、time()等函数,但对SQL SERVER数据库处理中,只能用datediff,dateadd等函数,而不能用date()、time()等函数。
(4)删除语句不同:
在对ACCESS数据库进行删除纪录时用:“delete * from user where id=10”,而对SQL SERVER数据库进行删除是用:“delete user where id=10”.
(5)另外,大家要注意对时间函数的把握,ACCESS与SQL是有很多不同的。
*)所有的默认值都丢失了。主要是数字类型和日期类型。
*)所有datediff('d', time1, time2)要改成datediff(day, time1, time2)
*)备注类型要通过cast(column as varchar)来使用。
*)CursorType要改成1,也就是打开数据库时要给出第一个数字参数为1,否则记录可能显示不完整。
*)isnull(rowname)要改成rowname = null
*)在对ACCESS数据库处理中,sql语句中直接可以用一些VB的函数,像cstr()函数,而对SQL SERVER数据库处理中,却不能用。
第二部分、sql2000在不同的主机之间转移;1、在SQL Server企业管理器里选中要转移的数据库,按鼠标右键,选所有任务->备份数据库。
备份 选数据库——完全,
目的——备份到——按添加按钮
文件名——在SQL Server服务器硬盘下输入一个自定义的备份数据库文件名(后缀一般是bak)
重写——选重写现有媒体
最后按确定按钮。
如果生成的备份数据库文件大于1M,要用压缩工具压缩后再到Internet上传输。
2、目的SQL Server数据库如果还没有此数据库,先创建一个新的数据库;
然后选中这个新创建的数据库,按鼠标右键,选所有任务->还原数据库
还原->从设备->选择设备->磁盘->添加(找到要导入的备份数据库文件名)->确定
还原备份集->数据库-完全
最后按确定按钮。完全的数据库导入成功了。
3、这样恢复的数据库数据应该是完整的,但是用户名访问可能不正常,这个部分请参考下面第三部分。
第三部分、mssql中如何修改表的所有者 在第二部分里,我们把mssql2000从一台主机转移到另外一台主机,或者本地上传到服务器时,就需要设置数据库的所有者权限。
如果用户名相同,在赋予用户某数据库的权限时,就会出错,提示:
“当前数据库中已存在用户或角色” 或 “因为选定的用户拥有对象,所以无法除去该用户” 或“(microsoft sql-dmo 窗口):错误21002:[SQL-DMO]用户xxx已经存在。”
这个时候,就需要我们删除当前的用户,然后才能把相同的名字的用户重新分配到数据库。有以下几个方法:
方法一、
登录SQL查询分析器,使用如下命令就可以很轻松地修改表的所有者,每个表执行一次:
use 数据库
go
EXEC sp_changeobjectowner '原表的所有者.表名','dbo'
也可以批量执行:
--执行这个语句,就可以把当前库的所有表的所有者改为dbo
use 数据库
go
exec sp_msforeachtable 'sp_changeobjectowner ''?'',''dbo'''
说明:
sp_changeobjectowner:更改当前数据库中对象的所有者。
语法:
sp_changeobjectowner [ @objname = ] 'object' , [ @newowner = ] 'owner' 方法二、右键点击该表-》设计表,在上面的一排小图标中,点最后一个"管理约束",点"表"页,在里面更改所有者。如下图:
参考:
1、
ACCESS数据库转化成SQL2000教程和注意事项