SSIS ->> Null & Null Functions
SSIS不支持值为NULL的变量。每种类型的变量都有自己的默认值。
做了一个测试,用一个Execute SQL Task输出一个NULL值给A变量,然后把A变量传到到另外一个Execute SQL Task插入表,得到的值是0。这里可以证明确实在《Professional Microsoft SQL Server 2012 Integration Services》中Dealing with NULLs一段讲到In SSIS, variables can’t be set to NULL是对的。即便我们有意设置某个值为NULL,结果还是变成了该类型的默认值。
那么在Expression可以用过NULL Functions(如NULL(DT_I4))作为比较对象,比如(@[User::Variable]==NULL(DT_I4))?0:1。当时这里又想到一个问题,如果用来赋值某个变量的表达式本身就可以返回和该类型默认值相等值,这样程序上就会出现Bug。所以在在程序上应该是用另外的值来替代。比如Int8的默认值是0,而为了避免出现错误程序出现错误判断,设计的时候需要制定好其他的值来代替。
Null Functions的作用是返回各种SSIS类型对应的NULL值,因为在T-SQL中的NULL到了SSIS中就必须是分为不同数据类型如NULL(DT_I4)。比如我们希望把源输入中某个INT栏位遇到0就替换NULL(DT_I4),这样进入到目标表中才会是NULL值。
下面是各种变量数据类型和他们对应的默认值

---------------------------------------------------------------------------------------------------------
Null function有一点需要注意的是,SSIS在对非UNICODE数据使用NULL function时,也就是NULL(DT_STR, «length», «code_page»)时,是需要在前面再做一次类型转换的,而不像对UNICODE字符串或者整型类型数据那样简单的用num == 0 ? NULL(DT_I4) : num就行。

在《Professional Microsoft SQL Server 2012 Integration Services》中有这样一段解释:
For some reason, this works differently when you want to save
non-Unicode data with a NULL value. You’d expect the following expression to work, but it doesn’t:
SUBSTRING([MyColumn] , 1, 1)==”A” ?
NULL(DT_STR, 255, 1252) : [MyColumn] (This doesn’t work in SSIS)
The preceding example won’t work because of how SSIS handles NULL values for the non-Unicode
string type as parameters. The only way to fix this is to cast the NULL function as follows:
SUBSTRING([MyColumn] , 1, 1)==”A” ?
(DT_STR, 255, 1252)NULL(DT_STR, 255, 1252) : [MyColumn]
This section should have clarified the common issues you are likely to encounter when dealing with
NULL values, especially as they relate to strings. However, there are still some tricks to learn about
dealing with strings, which we cover next.
SSIS ->> Null & Null Functions的更多相关文章
- 数据库中is null(is not null)与=null(!=null)的区别
在标准SQL语言(ANIS SQL)SQL-92规定的Null值的比较取值结果都为False,既Null=Null取值也是False.NULL在这里是一种未知值,千变万化的变量,不是“空”这一个定值! ...
- unity, Graphics.Blit (null, null, mat,0);
我使用 Graphics.Blit (null, finalRT, mat); 合成出一张finalRT,然后将finalRT用在editor脚本的OnInspector中使用 Graphics.Dr ...
- PHP中的逻辑判断函数empty() isset() is_null() ==NULL ===NULL
1.empty() header("Content-type: text/html; charset=utf-8"); if(!empty($data)){ //empty() 未 ...
- 如何解决数据库中,数字+null=null
如何解决数据库中,数字+null=null 我使用SQLServer,做一个 update 操作,累计一个数.在数据库中,为了方便,数据库中这个字段我设为允许为空,并且设置了默认值为 0 .但是在新增 ...
- null == null 或者 [] == [] 或者{} == {} 或者alert(1|| 2) 或者alert(1&& 2) 结果及原理
相信面试的小伙伴们都会遇到此头大的问题,是不是很想骂一句面试官:你白痴啊,鬼都用不着的东西拿来问,你还别说,这些看似用不着的东西却包含着最基础的原理,那我们来理一理. 1.alert(1||2)和 a ...
- SSIS 处理NULL
不同于SQL Server中NULL表示值是未知的(Unknown Value),没有数据类型,但是,在SSIS中,NULL是有数据类型的,要获取某一个NULL值,必须指定数据类型,例如,变量 Int ...
- iOS解析数据判断nil NULL Null的方法
+ (BOOL)isNil:(NSObject*)obj { if (obj == nil || obj == NULL) { return YES; } if ([obj isKindOfClass ...
- Convert.ToString(null) => null
{ string str0 = Convert.ToString(null); Console.WriteLine("0,{0}", str0); if (str0==" ...
- [转载]触发ASSERT(afxCurrentResourceHandle != NULL)错误的原因
触发ASSERT(afxCurrentResourceHandle != NULL)错误的原因 Debug Assert error afxwin1.inl line:22 翻译参考 http://w ...
随机推荐
- Java学习笔记--反射
什么是Java反射 概念 java反射是指java能够在运行时确定类的类型信息,包括其方法.字段.构造函数等,并能够通过反射调用类或者类对象的方法.在Java中,java.lang.Class类与ja ...
- Linux安装JBOSS
一.简介 JBoss是一个运行EJB的J2EE应用服务器.它是开放源代码的项目,遵循最新的J2EE规范.从JBoss项目开始至今,它已经从一个EJB容器发展成为一个基于的J2EE的一个web 操作系统 ...
- 如何用pdfbox-app-1.8.10.jar批处理将pdf文档转换成text文档
1.首先下载pdfbox-app-1.8.10.jar(下载地址:http://pdfbox.apache.org/download.html) 2.将pdfbox-app-1.8.10.jar加载到 ...
- Django:快速搭建简单的Blog
一,创建项目 1, 为blog创建名为mysite的工程项目: django-admin.py startproject mysite 2, 项目结构如下: mysite ├── manage.py ...
- 【BZOJ】【1024】【SCOI2009】生日快乐
枚举 想到以后一秒钟变水题…… 一开始我想:这不是可以随便切吗……但是突然想到:第一刀,必须切在n等分点上!因为要求最后每块的大小相等,那么同理,比如总共要切成7块,第一刀切成了$\frac{3}{7 ...
- Java内存模型(JMM)
参考: 1. http://www.tuicool.com/articles/UVzuQb
- PowerDesigner(八)-面向对象模型(用例图,序列图,类图,生成Java源代码及Java源代码生成类图)(转)
面向对象模型 面向对象模型是利用UML(统一建模语言)的图形来描述系统结构的模型,它从不同角度实现系统的工作状态.这些图形有助于用户,管理人员,系统分析人员,开发人员,测试人员和其他人员之间进行信息交 ...
- MYSQL导入导出.sql文件(转)
一.MYSQL的命令行模式的设置: 桌面->我的电脑->属性->环境变量->新建-> PATH=“:path\mysql\bin;”其中path为MYSQL的安装路径. ...
- AngularJs学习笔记--directive
原版地址:http://code.angularjs.org/1.0.2/docs/guide/directive Directive是教HTML玩一些新把戏的途径.在DOM编译期间,directiv ...
- Python编程指南 chapter 1
1.python使用方括号[]来存取一个序列中的某个数据项,像字符串.列表等包含若干数据项的序列都采用这种方法. 2.强制类型转换,int('24234'),str(235) 3.python中没有变 ...