本人想把一access数据库升迁为sql server数据库,升迁过程中数据表和查询全部都生成了SQL表,这样我就试着手动将“查询”转换成“视图”,遇到了一问题:
下面这个access查询语句在access里面生成的查询表总共有1314条记录,同样的语句我copy到sql server上面试图生成试图(仅仅修改了语法,没动其他),却只有139条记录,到底是为什么啊,自己纠结了半天没弄懂,哪位大神可以帮小弟看看问题出哪了,先谢过了!
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 Server 中双引号的 "杨" 表示一个对象(列名),字符串应该用单引号。
你确定你的语句能执行?
------解决思路----------------------
把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次看看。是哪个部分少记录 了。
------解决思路----------------------
你把每个条件单独查询,比较两边 COUNT(*) 是否一致。
是不是迁移数据的时候 NULL 被转成 '' 了?
------解决思路----------------------
你迁移数据不一致,查询结果当然不同了!
------解决思路----------------------
UPDATE shipping_list SET called = NULL WHERE called = ''
这是 '' 替换成 NULL,你需要不同的替换方向就交换一下。
每个字段都要单独替换。