【问题标题】:Difference between NULL and NULL("") in DMLDML 中 NULL 和 NULL("") 的区别
【发布时间】:2017-09-05 09:53:12
【问题描述】:

将 NULL 值写入 DML 和使用默认值的 NULL 有什么区别。写 NULL 值是一种不好的做法吗?何时决定采用哪种方法。

【问题讨论】:

    标签: dml ab-initio


    【解决方案1】:

    NULL 将存储一个字节标志以及数据,其中 Null('') 不存储一个字节标志,此外,字段中的任何空白值都将被视为 Null,即它具有“”作为默认值并将其视为等于无效的。因此,最好将 null 与默认值一起使用。

    【讨论】:

    • 你能告诉..那里的一个字节标志的目的是什么?
    【解决方案2】:

    Sarveshmishra 是正确的。回答您问题的另一部分 - 这是否是一种好的做法取决于您如何使用记录格式。


    NULL as byte flags 主要是在 Ab Initio 中使用的 NULL 的明确表示(即没有与真实数据冲突的风险),其代价是额外的记录宽度。

    适用于:当图表内部和图表之间需要严格正确的 null 处理时(并且当记录宽度和转换(重新格式化)成本可以接受时)

    不利于:与源系统和目标系统进行基于文件的数据交换。 (请注意,通过批量加载程序(例如 SQL Server bcp)的数据库输出是基于文件的。)


    NULL(default) 将 NULL 编码为特定的字符序列(或零宽度字符串)。选择的编码必须与上游/下游的接口契约匹配,否则存在数据冲突的风险(例如:在数据库中,"" NULL,但 NULL("") 将 "" 视为 NULL)。

    适用于:上游/下游数据交换,或者“”和 NULL 之间的区别并不重要。

    不利于:保证严格的空值处理。


    对于具有严格空值处理和零冲突风险的数据交换,另一种策略是在接口合约中定义显式空标志。

    【讨论】:

      猜你喜欢
      • 2010-09-05
      • 2012-09-03
      • 1970-01-01
      • 2013-01-12
      • 2012-11-19
      • 2011-02-14
      • 1970-01-01
      • 2023-03-18
      • 1970-01-01
      相关资源
      最近更新 更多