在软件开发过程中经常会遇到数据库升迁的问题原因比较多如acsess访问速度比sql server慢删除数据记录后access会留下空档文件越来越大(也可用压缩修复的方式减小文件大小但太麻烦)访问速度越来越慢甚至会数据库损坏损坏得比较轻的可以找第三方工具来修复便严重时会导致数据库无法修复或修复后数据记录会损坏所以我们大有必要升迁我们现有的Access数据库到SQL Server;
现谈谈笔者在升迁时的做法及注意事项
对于日期字段字段
access表示为##
SQLSERVER表示为
SQL语句区别select update 在对单表操作时都差不多
但多表操作时update语句的区别ACCESS与SQLSERVER中的UPDATE语句对比:
SQLSERVER中更新多表的UPDATE语句:
UPDATE Tab
SET aName = bName
FROM Tab aTab b
WHERE aID = bID;
同样功能的SQL语句在ACCESS中应该是
UPDATE Tab aTab b
SET aName = bName
WHERE aID = bID;
即:ACCESS中的UPDATE语句没有FROM子句所有引用的表都列在UPDATE关键字后
更新单表时都为
UPDATE table set ab=cd= where
delete语句
access中删除时用:delete * from table where a> 即只要把select 语句里的select 换成delete就可以了
sqlserve 中则为: delete from table where a> 即没有*号
as 后面的计算字段区别
access中可以这样select asum(num) as kc_numkc_num*num as all_kc_num 即可以把AS后的字段当作一个数据库字段参与计算
sqlserver 中则为select asum(num) as kc_numsum(num)*num as all_kc_num 即不可以把AS后的字段当作一个数据库字段参与计算
[]与[!]的区别
access中多表联合查询时select tab!a as tabatab!b tabb from tabtab 中间的AS可以不要
sqlserve 中则select taba as tabatabb tabb from tabtab 中间的AS可以不要
联合查询时
access中多表联合查询:select ab from(
select ab from tab where a> union select cd from tab ) group by ab
sqlserve 中则select ab from(
select ab from tab where a> union select cd from tab ) tmptable group by ab即要加一个虚的表tmptable表名任意
access升级到sqlserver时
可以用sqlserver的数据导入工具导入数据但要做必要的处理
access中的自动编号不会自动转换SQL中的自动编号只能转换为int型要把它手工改成标识字段种子为把所有导入被sqlserver转化成的以n开头的字段类型的n去掉如nvarchar>varchar把需要有秒类型的日期字段改成datatime类型(SQL会把所有的日期开转化成smalldatetime型)
true与=
access用where true表示条件为真
sqlserver用where =表示条件为真
判断字段值为空的区别
普通空
Access和sql server一样 where code is null 或 where code is nol null
条件空
Accessiif([num] is null[num]) 或 iif([num] is null[num][num])
SQLServer: isnull([num]) 或 isnull([num][num])
SQL语句取子串的区别
access:MID(字段n[n])LEFT(字段n)RIGHT(字段n)
如select left(cs)++cs as cs
SQLServer: SUBSTRING(expression start length)
如select substring(cs ) + substring(cs ) + + cs as cs
附如何发布基于ADO+SQL SERVER的应用
很多朋友在问如何发布基于ADO+SQL SERVER的应用程序笔者作了测试如下
Win访问xp或K的SQL SERVER服务器不用任何SQL的DLL文件只要保证能与其它工作组里的机子正常通信(能访问另外一台机子里的共享文件)这一步是保证安装了这三个协议TCP/IPSPX/IPXNETBEUIDG三个协议
我的测试环境是se+xpse只安装了必要的驱动程序其它的程序一个也没有装(专门装来测试这个的)