VSO5做了一个增删改的东西,公司Oracle运行的没有问题,回家用ACCESS运行就得不到结果。
 监视了下SQL语句,向大虾请教下!一.SQL语句插入测试
1。Oracle,ACCESS建了一个同样的表
2. 都用语句insert into ISSUE_STATUS (ISSUENO,ITHANDLE,ISSUE_STATUS,ITREMARK) values('ddd111','','','')插入一条记录
3. Oracle中用查询语句---(1)select * from issue_status where ithandle is null ,有结果
             (2)select * from issue_status where ithandle='' ,无结果4. ACCESS中用查询语句---(1)select * from issue_status where ithandle is null ,无结果
                          (2)select * from issue_status where ithandle='' ,有结果
两者不一样二。用ACCESS和PLSQLDeveloper的输入自动生成测试
1.Oracle中添加一行,在行中第一列输入数据---(1)用null查询有结果(2)用=''查询无结果
2.ACCESS添加一行,在行中第一列输入数据---(1)用null查询有结果(2)用=''查询无结果两者一样三。我困扰了好久的地方呵呵
(1)我在ASP.NET点击插入后,在新行的第一列输入数据
 (2)我以为效果和一样,结果证明效果是和一样,所以从Oracle数据库换到ACCESS后我的代码运行就不对了!!其他的MYSQL,SQL SERVER是不是也有这种类似的区别,请教了!!!

解决方案 »

  1.   

    oracle里 ''也就是null 所以当你用ithandle='' 也就是等价于 ithandle=null 这里返回是false,当然就没有结果呀。所以要把空字符选出来,在Oracle需要用 is null来选择。其他的问题都是和这个一样的。对是有区别。
      

  2.   

    原因是由于 oracle 中没有0长度字符串的概念,而access中有。所谓0长度字符串就是没有长度的字符串【''】在oracle中 0长度字符串 会被自动转化成 NULL
       所以你用 is null 能查出
             用 [='']相当于[=NULL],这个就不用说了,返回结果 unknown,自然什么也查不出
         
    在access中 0长度字符串不会被自动转化成 NULL
       所以你用 is null 查不出,因为在access中 NULL 和 '' 是不一样的。
    为了避免上面的问题最好在插入数据的时候使用 NULL 关键字,oracle也推荐这么做。
    insert into ISSUE_STATUS (ISSUENO,ITHANDLE,ISSUE_STATUS,ITREMARK)
    values('ddd111',NULL,NULL,NULL);
      

  3.   

    img=http://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/003/monkey/5.gif][/img]
      

  4.   

    谢谢1楼和2楼,因为是网页界面插入,所以做不到insert into ISSUE_STATUS (ISSUENO,ITHANDLE,ISSUE_STATUS,ITREMARK)
    values('ddd111',NULL,NULL,NULL);的效果...
    除非检测''值然后后台转为NULL?