SQL Server 中双引号的 "杨" 表示一个对象(列名),字符串应该用单引号。 你确定你的语句能执行?
看下括号吧,and和or的问题!
把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次看看。是哪个部分少记录 了。
双引号可以在sql中设置吧~可以使用的。
把条件换成这个 试试 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))
好吧。 那么有中文的字段应该用 nvarchar 类型,查询条件要用 N"杨"。
这张图是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 '%安捷伦%'))
UPDATE shipping_list SET called = NULL WHERE called = '' 这是 '' 替换成 NULL,你需要不同的替换方向就交换一下。 每个字段都要单独替换。
SELECT called, COUNT(*) FROM shipping_list GROUP BY called 每个字段都这样做下分组统计,比较两个数据库有什么差异?
我使用 select * from shipping_list where called is Null 分别在SQL SERVER和Access里面做查询, SQL SERVER返回零记录,Access却返回了1881条记录,这个IS NULL看来在SQL SERVER和Access里面意义不一样啊?
修改了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,真心想不通啊!
剔除 AND ((shipping_list.account) Not Like '%安捷伦%')后在sql和access里面都是返回1881行,模糊查询有问题吗?
Access 用 Not Like "%安捷伦%",你把这个语句想清楚再说?
我查过貌似在Access里面模糊查询没有%这个通配符?
所以 Access 中每一条记录是符合 Not Like "%安捷伦%"
所以 Access 中每一条记录是符合 Not Like "%安捷伦%" 你还在问为什么两边结果为什么不一样
不是啊,诡异的是access里面没有 AND ((shipping_list.account) Not Like '%安捷伦%')返回1881行,有AND ((shipping_list.account) Not Like '%安捷伦%')返回1314啊,他大爷的,想骂微软了!
单个条件查 account Like '%安捷伦%' 什么结果?
单个条件查 account Like '%安捷伦%' 在access和sql里面也是不一样的,access里面数据比sql多,但是如果我将通配符改成*放在access返回了52012条记录,在sql还是使用%通配符也是返回52012条记录!access通配符*和sql通配符%作用一样?那么access使用%又是什么作用呢?
答案出来了!我将通配符%换成*就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 "*安捷伦*"));
你确定你的语句能执行?
(((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次看看。是哪个部分少记录 了。
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))
那么有中文的字段应该用 nvarchar 类型,查询条件要用 N"杨"。
这是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 '%安捷伦%'))
这是 '' 替换成 NULL,你需要不同的替换方向就交换一下。
每个字段都要单独替换。
每个字段都这样做下分组统计,比较两个数据库有什么差异?
select * from shipping_list where called is Null
分别在SQL SERVER和Access里面做查询,
SQL SERVER返回零记录,Access却返回了1881条记录,这个IS NULL看来在SQL SERVER和Access里面意义不一样啊?
看 SQL Server 中哪个统计的条数和 Access 的条数一致,那么就是迁移时将 NULL 变换成的这个值。可以用 #14 的代码改回 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,真心想不通啊!
你还在问为什么两边结果为什么不一样
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 "*安捷伦*"));
语法不一样,[b]代码[b]一致也不一定结果一致。
而access里面'%'这个通配符应该是非法的,结果确实两个通配符在两个数据库系统里面都可以用,瞬间石化了,得找资料甄别下这两个通配符在两个数据库系统里面的用法