微软BI 之SSIS 系列 - 对于平面文件中 NULL 值处理过程中容易极易混淆的几个细节
开篇介绍
- OLE DB Destination 中的 Keep Nulls 如何控制 NULL 值的显示?
- 为什么选中了 Keep Nulls 但是数据库中没有 NULL 值?
- 为什么在 Flat File Source 中勾选上了 Retain null values..但目标表上显示的是一个当前日期,而不是 NULL ?
项目需求和文件处理中的问题
- 如何让它在输出到目标表的时候使用目标表列的默认值?
- 如何让它在输出到目标表的时候显示 NULL ?
- 如何让它在输出到目标表的时候显示空白字符串 ?
普遍性的概念理解上的误区
概括与总结


IF OBJECT_ID('T005_STAGING_EMPLOYEE') IS NOT NULL
DROP TABLE T005_STAGING_EMPLOYEE
GO CREATE TABLE [T005_STAGING_EMPLOYEE_1] (
ID INT PRIMARY KEY IDENTITY(1,1),
[FIRSTNAME] VARCHAR(50),
[LASTNAME] VARCHAR(50),
[MIDDLENAME] VARCHAR(50) DEFAULT('-'),
[NAMESTYLE] VARCHAR(50),
[TITLE] VARCHAR(50),
[HIREDATE] VARCHAR(50) DEFAULT(GETDATE()),
[BIRTHDATE] VARCHAR(50),
[EMAILADDRESS] VARCHAR(50)
)
第一个测试




第二个测试


第三个测试


第四个测试

第五个测试


第六个测试


案例测试的结论
- 空白字符串
- NULL 值
- 数据表中列的默认值

第一阶段 - Flat File Source 对空值的转换过程



第二阶段 OLE DB Destination 对空值的处理过程
无论是 Fast Load 模式还是非 Fast Load 模式,只要接受上游空间向下输出的是非空值,即非NULL值,那么上游数据是什么,下游就接受成什么。
因此,即使是文件数据源中存在 NULL 空值,但是只要 Flat File Source 中的 Retain null values from the source as null values in the data flow 勾选上,那么空值在文件源段向下输出时就已经变成空白字符串。所以在 OLE DB Destination 中无论设置什么模式,最终都不会影响空白字符串的输出,因为空白字符串是有值的,长度为0的字符串。
只有当 Flat File Source 中的 Retain null values from the source as null values in the data flow 勾选上的时候,空值为转换为 NULL 值,这时 OLE DB Destination 中的设置才会影响到最终输出的值。
- Table or view - 对 NULL 不处理,上游是 NULL 值,它最终输出就是 NULL 值。
- Table or view - fast load 加上默认不选中 Keep nulls - 如果目标列没有 DEFAULT 默认约束的话,那么输出到目标列就是 NULL 值;如果目标列有 DEFAULT 默认约束的话,那么输出到目标列使用的就是 DEFAULT 默认约束中的值。
- Table or view - fast load + 选中 Keep nulls - 无论目标列有没有 DEFAULT 默认约束,都将保留 NULL 值。

所以,把 Flat File Source 和 OLE DB Destination 分开来看,只考虑如何控制 Flat File Source 它的输出是否为 NULL,只考虑 OLE DB Destination 中对 NULL 值的不同处理方式,分成这样两个阶段这个概念就很容易理解了。并且,理解了上面这些内容,就不会再认为只要选中了 Flat File Source 中的 Retain null values from the source as null values in the data flow,文件中的 NULL 值就会输出到目标表了。
更多 BI 文章请参看 BI 系列随笔列表 (SSIS, SSRS, SSAS, MDX, SQL Server) 如果觉得这篇文章看了对您有帮助,请帮助推荐,以方便他人在 BIWORK 博客推荐栏中快速看到这些文章。
微软BI 之SSIS 系列 - 对于平面文件中 NULL 值处理过程中容易极易混淆的几个细节的更多相关文章
- 微软BI 之SSIS 系列 - 带有 Header 和 Trailer 的不规则的平面文件输出处理技巧
案例背景与需求介绍 之前做过一个美国的医疗保险的项目,保险提供商有大量的文件需要发送给比如像银行,医疗协会,第三方服务商等.比如像与银行交互的 ACH 文件,传送给协会的 ACH Credit 等文件 ...
- 微软BI 之SSIS 系列 - 在 SSIS 中导入 ACCESS 数据库中的数据
开篇介绍 来自 天善学院 一个学员的问题,如何在 SSIS 中导入 ACCESS 数据表中的数据. 在 SSIS 中导入 ACCESS 数据库数据 ACCESS 实际上是一个轻量级的桌面数据库,直接使 ...
- 微软BI 之SSIS 系列 - MVP 们也不解的 Scrip Task 脚本任务中的一个 Bug
开篇介绍 前些天自己在整理 SSIS 2012 资料的时候发现了一个功能设计上的疑似Bug,在 Script Task 中是可以给只读列表中的变量赋值.我记得以前在 2008 的版本中为了弄明白这个配 ...
- 微软BI 之SSIS 系列 - 数据仓库中实现 Slowly Changing Dimension 缓慢渐变维度的三种方式
开篇介绍 关于 Slowly Changing Dimension 缓慢渐变维度的理论概念请参看 数据仓库系列 - 缓慢渐变维度 (Slowly Changing Dimension) 常见的三种类型 ...
- 微软BI 之SSIS 系列 - Lookup 中的字符串比较大小写处理 Case Sensitive or Insensitive
开篇介绍 前几天碰到这样的一个问题,在 Lookup 中如何设置大小写不敏感比较,即如何在 Lookup 中的字符串比较时不区分大小写? 实际上就这个问题已经有很多人提给微软了,但是得到的结果就是 C ...
- 微软BI 之SSIS 系列 - 使用 Script Component Destination 和 ADO.NET 解析不规则文件并插入数据
开篇介绍 这一篇文章是 微软BI 之SSIS 系列 - 带有 Header 和 Trailer 的不规则的平面文件输出处理技巧 的续篇,在上篇文章中介绍到了对于这种不规则文件输出的处理方式.比如下图中 ...
- 微软BI 之SSIS 系列 - 再谈Lookup 缓存
开篇介绍 关于 Lookup 的缓存其实在之前的一篇文章中已经提到了 微软BI 之SSIS 系列 - Lookup 组件的使用与它的几种缓存模式 - Full Cache, Partial Cache ...
- 微软BI 之SSIS 系列 - 使用 Script Task 访问非 Windows 验证下的 SMTP 服务器发送邮件
原文:微软BI 之SSIS 系列 - 使用 Script Task 访问非 Windows 验证下的 SMTP 服务器发送邮件 开篇介绍 大多数情况下我们的 SSIS 包都会配置在 SQL Agent ...
- 微软BI 之SSIS 系列 - 使用 SQL Profilling Task (数据探测) 检测数据源数据
开篇介绍 SQL Profilling Task 可能我们很多人都没有在 SSIS 中真正使用过,所以对于这个控件的用法可能也不太了解.那我们换一个讲法,假设我们有这样的一个需求 - 需要对数据库表中 ...
随机推荐
- Windows系统下oracle数据库每天定时备份
第一步:建立备份脚本oraclebackup.bat 首先建立一个备份bat文件,在D盘下新建备份目录oraclebackup,将oracle安装目录下的EXP.EXE复制到此目录下,再新建一个文本文 ...
- Codeforces Round #429 (Div. 2) - D Leha and another game about graph
Leha and another game about graph 题目大意:给你一个图,每个节点都有一个v( -1 , 0 ,1)值,要求你选一些边,使v值为1 的点度数为奇数,v值为0的度数为偶数 ...
- BZOJ4997 [Usaco2017 Feb]Why Did the Cow Cross the Road III
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ4997 题意概括 在n*n的区域里,每一个1*1的块都是一个格子. 有k头牛在里面. 有r个篱笆把格 ...
- Einbahnstrasse HDU2923
基础2923题 处理输入很麻烦 有可能一个城市有多辆破车要拖 应该严谨一点的 考虑所有情况 #include<bits/stdc++.h> using namespace std; ] ...
- Redis持久化(persistence)
Redis 持久化 Redis 提供了多种不同级别的持久化方式: RDB 持久化可以在指定的时间间隔内生成数据集的时间点快照(point-in-time snapshot). AOF 持久化记录服务器 ...
- ubuntu 18图形界面
sh .start_mode.sh: 换操作方式(图形界面,终端界面): 桌面版: 界面中 ctrl + shift + t 打开终端 ctrl + shift + "+" 放大字 ...
- 【RAY TRACING THE REST OF YOUR LIFE 超详解】 光线追踪 3-4 基于重要性采样的材质初探
Preface 我们今天来把第三本书从开局到现在讲的一大堆理论运用到我们的框架中,那么今天我们首先将原始的材质改为基于重要性采样原理的材质 这一篇是代码工程中进行MC理论应用的初步尝试篇 Read ...
- 通过 DOM
通过 DOM,您可访问 HTML 文档中的每个节点. 查找并访问节点 你可通过若干种方法来查找您希望操作的元素: 通过使用 getElementById() 和 getElementsByTagNam ...
- 关于Git的总结
首先我们先看一张图: 首先我们必须要先理解这几个概念:暂存区,本地仓库,远程仓库 暂存区:这个是我们每一次进行代码修改的地方,例如我们ieda的所编译的代码就是缓存区 本地仓库:是我们每一次pull, ...
- 在webpack中使用postcss之插件包precss
precss是一个预处理css的插件包,集成了很多postcss插件的功能,比如嵌套,变量,继承,混合,循环,判断.下面来介绍如何在webpack中使用precss.一.新建项目1.新建package ...