解决方案 »

  1.   

    SQL Server 中双引号的 "杨" 表示一个对象(列名),字符串应该用单引号。
    你确定你的语句能执行?
      

  2.   

    看下括号吧,and和or的问题!
      

  3.   

    把OR 分隔开。就是
    (((shipping_list.called) Is Null) AND ((shipping_list.last_name)<>"杨") AND ((shipping_list.first_name)<>"平") AND ((shipping_list.account) Is Null)) 
     (((shipping_list.called) Is Null) AND ((shipping_list.account) Not Like "%安捷伦%"))
    分别作为调节查询2次看看。是哪个部分少记录 了。
      

  4.   

    双引号可以在sql中设置吧~可以使用的。
      

  5.   

    把条件换成这个 试试
    where  shipping_list.called Is Null
      and (shipping_list.account Not Like'%安捷伦%'
      
      or
      (shipping_list.last_name<>"杨" 
    AND shipping_list.first_name<>"平"
    AND shipping_list.account Is Null))
      

  6.   

    好吧。
    那么有中文的字段应该用 nvarchar 类型,查询条件要用 N"杨"。
      

  7.   

    这张图是access里面的查询结果
    这是SQL SERVER里面的查询语句:SELECT shipping_list.*
    FROM shipping_list
    WHERE (((shipping_list.called) Is Null) AND ((shipping_list.last_name)<>'杨') AND ((shipping_list.first_name)<>'平') AND ((shipping_list.account) Is Null)) OR (((shipping_list.called) Is Null) AND ((shipping_list.account) Not Like '%安捷伦%'))
      

  8.   

    你把每个条件单独查询,比较两边 COUNT(*) 是否一致。是不是迁移数据的时候 NULL 被转成 '' 了?
      

  9.   

    access里面called和account里面如果没内容就是’‘,但是sql server里面没内容就是null,难道是这个出了问题?
      

  10.   

    哪位大神告知怎么修改啊,小弟不是dba,对数据库方面不是很熟悉,请大神出马搭救啊
      

  11.   

    UPDATE shipping_list SET called = NULL WHERE called = ''
    这是 '' 替换成 NULL,你需要不同的替换方向就交换一下。
    每个字段都要单独替换。
      

  12.   

    SELECT called, COUNT(*) FROM shipping_list GROUP BY called
    每个字段都这样做下分组统计,比较两个数据库有什么差异?
      

  13.   

    我使用
    select * from shipping_list where called is Null
    分别在SQL SERVER和Access里面做查询,
    SQL SERVER返回零记录,Access却返回了1881条记录,这个IS NULL看来在SQL SERVER和Access里面意义不一样啊?
      

  14.   

    所以让你做分组统计。
    看 SQL Server 中哪个统计的条数和 Access 的条数一致,那么就是迁移时将 NULL 变换成的这个值。可以用 #14 的代码改回 NULL。
    如果总数都对不上,那么数据迁移错误。
      

  15.   

    修改了sql server里面的called和account字段,空让它直接显示null
    SQL : select * from shipping_list where called is null返回1881条记录           select * from shipping_list where account is null返回915条记录           SELECT shipping_list.*
    FROM shipping_list
    WHERE (((shipping_list.called) Is Null) AND ((shipping_list.last_name)<>'杨') AND ((shipping_list.first_name)<>'平') AND ((shipping_list.account) Is Null)) OR (((shipping_list.called) Is Null) AND ((shipping_list.account) Not Like '%安捷伦%'))
    还是返回139Access: select * from shipping_list where called is null返回1881条记录           select * from shipping_list where account is null返回915条记录           SELECT shipping_list.*
    FROM shipping_list
    WHERE (((shipping_list.called) Is Null) AND ((shipping_list.last_name)<>"杨") AND ((shipping_list.first_name)<>"平") AND ((shipping_list.account) Is Null)) OR (((shipping_list.called) Is Null) AND ((shipping_list.account) Not Like "%安捷伦%"));
    返回1314,真心想不通啊!
      

  16.   

    剔除 AND ((shipping_list.account) Not Like '%安捷伦%')后在sql和access里面都是返回1881行,模糊查询有问题吗?
      

  17.   

    Access 用 Not Like "%安捷伦%",你把这个语句想清楚再说?
      

  18.   

    我查过貌似在Access里面模糊查询没有%这个通配符?
      

  19.   

    所以 Access 中每一条记录是符合 Not Like "%安捷伦%" 
      

  20.   

    所以 Access 中每一条记录是符合 Not Like "%安捷伦%" 
    你还在问为什么两边结果为什么不一样 
      

  21.   

    不是啊,诡异的是access里面没有 AND ((shipping_list.account) Not Like '%安捷伦%')返回1881行,有AND ((shipping_list.account) Not Like '%安捷伦%')返回1314啊,他大爷的,想骂微软了!
      

  22.   

    单个条件查 account Like '%安捷伦%' 什么结果?
      

  23.   

    单个条件查 account Like '%安捷伦%' 在access和sql里面也是不一样的,access里面数据比sql多,但是如果我将通配符改成*放在access返回了52012条记录,在sql还是使用%通配符也是返回52012条记录!access通配符*和sql通配符%作用一样?那么access使用%又是什么作用呢?
      

  24.   

    答案出来了!我将通配符%换成*就o了,也就是说这样子:access : SELECT shipping_list.*
    FROM shipping_list
    WHERE (((shipping_list.called) Is Null) AND ((shipping_list.last_name)<>"杨") AND ((shipping_list.first_name)<>"平") AND ((shipping_list.account) Is Null)) OR (((shipping_list.called) Is Null) AND ((shipping_list.account) Not Like "%安捷伦%"));sql : SELECT shipping_list.*
    FROM shipping_list
    WHERE (((shipping_list.called) Is Null) AND ((shipping_list.last_name)<>"杨") AND ((shipping_list.first_name)<>"平") AND ((shipping_list.account) Is Null)) OR (((shipping_list.called) Is Null) AND ((shipping_list.account) Not Like "*安捷伦*"));
      

  25.   

    本来讨论的前提就必须是Access/SQL Server查询的逻辑是一致的。
    语法不一样,[b]代码[b]一致也不一定结果一致。
      

  26.   

    好经典啊,其实就是Access/SQL Server两个语法不一致造成的结果啊
      

  27.   

    其实印象中我在SQL SERVER模糊查询时一直是用这个'%'通配符的,之前一直不知道用'*',
    而access里面'%'这个通配符应该是非法的,结果确实两个通配符在两个数据库系统里面都可以用,瞬间石化了,得找资料甄别下这两个通配符在两个数据库系统里面的用法