Mar 29

Access转成Sql Server的错误问题总结 晴

, 09/03/29 20:20 , 技术开发 » 数据库 , 评论(0) , 引用(0) , 阅读(2735) , Via 本站原创 | |
为了开发方便,凑合着用ACC在Vista下写Asp,但正式导出为SqlServer时,上来就出来个比较麻烦的问题。
Microsoft OLE DB Provider for SQL Server 错误 '80040e14'
列名 'True' 无效。
/inc/function.asp,行 54
MS真是BT啊,同类产品竟然导入会出现这么多字段类型差异。索引、自动编号丢失就算了,连共通的逻辑型都不共通。
只能修改代码了,BS一下MS!
先写了一个共通的DB连接方法,只需要改个字段就可以使库类型切换了。
Array
Array
For SQLServer还是For Aceess的程序使用的语法大体差不多,但是有一些微妙的差别,正是这些差别需要修改的部分如下:

(1)时间函数的问题:
SQL数据库的时间函数与access不同,最常见的是取现在时间的函数,access是now(),SQL是getdate()。因此凡是在where子句中使用了now()的地方都要改成getdate();注意,now()函数在asp程序本身也要使用,凡是不在数据库查询或执行语句中使用的now()函数千万不要改。
(2)时间比较函数:
datediff('d','时间1',‘时间2’)这是access查询用的格式,SQl中这些引号都要去掉,同时时间格式的前后可能加上了#,这也要去掉。同样这也是指在sql语句中的,在asp语句中的要保持原样。
(3)空值的表示:
在access中,判断空值一般用是否=""来表示,但是这在SQL中往往出错,如果遇到出错的问题或者程序运行不正常,可以改成如这样判断:where (name is null)
(4)真假值判断:
access中可以用=true、=false来判断,但是在SQL中就会出错,因此在SQL查询或执行语句中这类判断要分别改成=1、=0。注意一点:有些程序虽然写成=“true”,但是由于有引号,所以这个字段是字符类型的,你不能改成=1,保持原样即可。
这点就是我开头说的错误部分。

Array
1.ACCESS的数据库中的自动编号类型在转化时,sqlserver并没有将它设为自动编号型,我们需在SQL创建语句中加上identity,表示自动编号!

2.转化时,跟日期有关的字段,SQLSERVER默认为smalldatetime型,我们最好将它变为datetime型,因为datetime型的范围比smalldatetime型大。我遇见这种情况,用smalldatetime型时,转化失败,而用datetime型时,转化成功。

3.对此两种数据库进行操作的sql语句不全相同。
例如:在对ACCESS数据库进行删除纪录时用:"delete * from zhozcom where id=7",而对SQLSERVER数据库进行删除是用:"delete from zhozcom where id=7"。
4.日期函数不相同,在对ACCESS数据库处理中,可用date()、time()等函数,但对SQLSERVER数据库处理中,只能用datediff,dateadd等函数,而不能用date()、time()等函数。

5.在对ACCESS数据库处理中,sql语句中直接可以用一些VB的函数,像cstr()函数,而对SQLSERVER数据库处理中,却不能用。

这些破事,有些麻烦以后有这样的相关转换操作时需要先考虑好了,以减少后期的麻烦。

作者:@Everyday NetLog
地址:http://blog.zhoz.com/read.php?551
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!

发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]