CJ7*_*CJ7 3 vb6 ms-access dao jet
在访问MDB文件的VB6程序中,正在执行以下SQL查询:
> Select * FROM [table1] WHERE ([type] = 1 OR [type] = 2 OR [type] = 6)
> AND ([notes] = Null OR [notes] = '0') AND [date] >=
> cvdate('09/03/2013') ORDER BY [date], [column2]
Run Code Online (Sandbox Code Playgroud)
如果我Microsoft Access 14.0 Object Library在程序中引用,则返回的记录集具有0行.
如果我引用Microsoft DAO 3.51 Object Library返回的记录集已超过100行.
造成这种差异的原因是什么?两个提供商处理测试的方式有区别Null吗?这是ACE DAO访问旧MDB文件的重大变化吗?
WHERE ... [notes] = Null是非标准的SQL.空传播可能会强制任何涉及Null返回的表达式Null.因此,表达式[notes] = Null(您希望它是一个布尔表达式)可以很好地返回Null,这既不是也不True是False.
查询处理器如何处理该Null值可能确实从一个数据库引擎到另一个数据库引擎不同:它可以解释Null为False,或者它可以忽略结果,或者它可能触发错误.另请注意,null传播可能会将整个WHERE子句折叠为Nullif ...
(some other condition) AND (Null)
...评估为Null.
标准SQL将是([notes] IS NULL)和Jet/ACE等效的IsNull([notes]).这两个都将返回True或False.
| 归档时间: |
|
| 查看次数: |
407 次 |
| 最近记录: |