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的更多相关文章

  1. 数据库中is null(is not null)与=null(!=null)的区别

    在标准SQL语言(ANIS SQL)SQL-92规定的Null值的比较取值结果都为False,既Null=Null取值也是False.NULL在这里是一种未知值,千变万化的变量,不是“空”这一个定值! ...

  2. unity, Graphics.Blit (null, null, mat,0);

    我使用 Graphics.Blit (null, finalRT, mat); 合成出一张finalRT,然后将finalRT用在editor脚本的OnInspector中使用 Graphics.Dr ...

  3. PHP中的逻辑判断函数empty() isset() is_null() ==NULL ===NULL

    1.empty() header("Content-type: text/html; charset=utf-8"); if(!empty($data)){ //empty() 未 ...

  4. 如何解决数据库中,数字+null=null

    如何解决数据库中,数字+null=null 我使用SQLServer,做一个 update 操作,累计一个数.在数据库中,为了方便,数据库中这个字段我设为允许为空,并且设置了默认值为 0 .但是在新增 ...

  5. null == null 或者 [] == [] 或者{} == {} 或者alert(1|| 2) 或者alert(1&& 2) 结果及原理

    相信面试的小伙伴们都会遇到此头大的问题,是不是很想骂一句面试官:你白痴啊,鬼都用不着的东西拿来问,你还别说,这些看似用不着的东西却包含着最基础的原理,那我们来理一理. 1.alert(1||2)和 a ...

  6. SSIS 处理NULL

    不同于SQL Server中NULL表示值是未知的(Unknown Value),没有数据类型,但是,在SSIS中,NULL是有数据类型的,要获取某一个NULL值,必须指定数据类型,例如,变量 Int ...

  7. iOS解析数据判断nil NULL Null的方法

    + (BOOL)isNil:(NSObject*)obj { if (obj == nil || obj == NULL) { return YES; } if ([obj isKindOfClass ...

  8. Convert.ToString(null) => null

    { string str0 = Convert.ToString(null); Console.WriteLine("0,{0}", str0); if (str0==" ...

  9. [转载]触发ASSERT(afxCurrentResourceHandle != NULL)错误的原因

    触发ASSERT(afxCurrentResourceHandle != NULL)错误的原因 Debug Assert error afxwin1.inl line:22 翻译参考 http://w ...

随机推荐

  1. 团队项目——特定功能NABC

    我们要做的项目是截屏软件,目前决定做电脑端的应用 我觉得这个软件应该具有随意截屏的功能,就是可以用鼠标拖动线条,只要形成闭合图形就可以将线条内的图像截取出来: NABC模型: N(Need): 许多人 ...

  2. xml给提示

    1.     FAQ:不给提示: a)     window – preferences – myeclipse – xml – xml catalog b)     User Specified E ...

  3. SqlServer with递归查询的使用

    1.数据准备假定有一个表DiGui,有两个字段Id int ParentId intId ParentId4 05 07 02 18 515 59 714 1130 1523 1541 18104 2 ...

  4. cf 61E. Enemy is weak 树状数组求逆序数(WA) 分类: Brush Mode 2014-10-19 15:16 104人阅读 评论(0) 收藏

    #include <iostream> #include <algorithm> #include <cstdio> #include <cstring> ...

  5. 使用css3伪元素制作时间轴并且实现鼠标选中高亮效果

    利用css3来制作时间轴的知识要点:伪元素,以及如何在伪元素上添加锚伪类 1)::before 在元素之前添加内容. 2)::after 在元素之后添加内容. 提示:亦可写成 :before :aft ...

  6. VC++之GetLastError()使用说明

    VC中GetLastError()获取错误信息的使用 在VC中编写应用程序时,经常需要涉及到错误处理问题.许多函数调用只用TRUE和FALSE来表明函数的运行结果.一旦出现错误,MSDN中往往会指出请 ...

  7. C++时间标准库时间time和系统时间的使用

    #include <iostream> #include <time.h> #include <stdio.h> #include <windows.h> ...

  8. MariaDB Galera Cluster集群

    一.MariaDB Galera Cluster概要: 1.简述: MariaDB Galera Cluster 是一套在mysql innodb存储引擎上面实现multi-master及数据实时同步 ...

  9. HDU4945 2048(dp)

    先是看错题意..然后知道题意之后写了发dp..无限TLE..实在是不知道怎么优化了,跑了遍数据是对的,就当作理论AC掉好了.. #pragma warning(disable:4996) #inclu ...

  10. HDU 4597 Play Game(记忆化搜索,深搜)

    题目 //传说中的记忆化搜索,好吧,就是用深搜//多做题吧,,这个解法是搜来的,蛮好理解的 //题目大意:给出两堆牌,只能从最上和最下取,然后两个人轮流取,都按照自己最优的策略,//问说第一个人对多的 ...