技术答疑.过滤.基础资料字段和文本字段过滤空值的差异分析

栏目:云星空知识作者:金蝶来源:金蝶云社区发布:2024-09-23浏览:1

技术答疑.过滤.基础资料字段和文本字段过滤空值的差异分析

【问题描述】应收单,使用源单单据类型字段进行不等于过滤时,无法获取源单单据类型等于空值的数据行;使用备注字段进行等于过滤时,可以获取备注等于空值的数据行。



【原因分析】通过数据库抓包工具(SQL Server ProFiler),我们可以抓到上图中的列表查询产生的SQL语句如下:

分析SQL可知:

源单单据类型不等于标准采购单产生的SQL条件是:st112_L.FNAME <> N'标准采购单'

备注不等于xxxxxx产生的SQL条件是:t1.FCOMMENT <> N'xxxxxx'


由此可知,源单单据类型字段(基础资料字段)参与过滤时,是使用的源单单据类型的名称查询,而非内码,因为源单单据类型的名称是多语言字段,所以用名称查询时,必须用应收单分录表t_AR_receivableEntry与源单单据类型的多语言表T_BAS_BILLTYPE_L进行左连接。当应收单分录表中的源单单据类型为空时,左连接的结果集合中的源单单据类型名称是NULL,而NULL值在数据库中代表的是不确定,用NULL值和任何值进行布尔运算,返回的都是否(False)。当源单单据类型为空时,实际执行的是NULL<> N'标准采购单',此条件永远不成立,这就是源单单据类型为空的数据行无法查询出来的根本原因。


那么,备注为空的数据行为什么可以查询出来呢?首先,备注字段直接参与查询,不存在表关联,不存在NULL值问题;其次,设计表结构时,文本字段通常都会设计成非空且给予默认值(‘ ’),所以备注字段不会存在NULL值。当备注字段为空时,实际执行的是' '<>N'xxxxxx',此条件恒成立,所以备注为空的数据行可以查询出来。



【变通方案】

如果想把源单单据类型为空的数据行一起查询出来,要怎么设置过滤条件呢?可参考下图。

新的过滤条件对应的查询SQL如下,此时源单单据类型为空的数据行就可以查询出来啦。

-----------------------------------------------------------------------------------------------------













【金蝶云星空BOS二次开发案例演示】https://vip.kingdee.com/article/94751030918525696

技术答疑.过滤.基础资料字段和文本字段过滤空值的差异分析

【问题描述】应收单,使用源单单据类型字段进行不等于过滤时,无法获取源单单据类型等于空值的数据行;使用备注字段进行等于过滤时,可以获...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息