SSIS 数据类型 第二篇:变量的数据类型
变量(Variable)用于存储在Package运行时用到的值,集成服务支持两种类型的变量:用户自定义的变量和系统变量,自定义的变量由用户来定义,系统变量由集成服务来定义。
变量的用途十分广泛,用于容器、Task和事件处理程序中,在Script Task和Scipt Component 也会用变量。SSIS中的变量是强类型的,这意味着必须为变量设置正确的类型。
一,变量的类型
SSIS变量支持的类型列表:
- Boolean:布尔类型,只有两个有效值:true 和 false
- Char:单个字符
- DateTime:日期和时间,格式是:5/29/2020 6:05:48 PM
- DBNull:NULL
- Decimal:精确小数
- Double 和 Single,双精度和单精度浮点数
- String:字符类型
- Object:System.Object类型
- SByte,Int16,Int32,Int64:有符号的整数,可以为正整数、0和负整数
- Byte,Uint32,Uint64:无符号的整数,值必须大于等于0,Byte占用1个字节,相当于UInt8,
最为特殊的是Object类型,该类型的变量可以转换为其他数据类型。
二,变量的值
SSIS的变量不允许为null,当没有为变量赋值时,变量有默认值:

经过测试,string 数据类型的长度可能是8000Bytes,也就是对应SQL Server的varchar(8000) 或 nvarchar(4000)
三,变量的数据类型和TSQL数据类型的映射
SSIS 变量的数据类型,不同于SSIS的数据类型,但都和SSIS的数据类型相兼容,在进行表达式求值时,SSIS自动将变量的数据类型隐式转换成SSIS的数据类型,然后进行求值。
1,字符数据类型
字符变量和TSQL数据类型的映射关系:
- String:char,nchar,varchar(n),nvarchar(n), 最大8000个字节。
- object:varchar(max),nvarchar(max)
- Char: char(1)
2,数值类型
数值类型的变量和TSQL数据类型的映射关系:
- Boolean:bit
- Int64:bigint
- Int32:int
- Int16:smallint
- Byte:tinyint
- object:varbinary(max), varchar(max)
- 精确小数:Decimal 在SQL Server 2012以后,对应TSQL的decimal
- 近似小数:Single 对应TSQL的float(24), Double 对应TSQL的float(53)
3,日期/时间类型
日期/时间类型的变量和TSQL数据类型的映射关系:
- DateTime:对应TSQL的datetime
- Object:对应TSQL的time,date,datetime2
4,NULL
DBNull对应TSQL的NULL
四,如何处理TSQL中的max类型?
在Execute SQL Task中,当把nvarchar(max) 和 varchar(max) 类型的值 赋值给变量时,如果变量的类型是String,SSIS会抛出错误:
[Execute SQL Task] Error: An error occurred while assigning a value to variable "strVar": "The type of the value (DBNull) being assigned to variable "User::strVar" differs from the current variable type (String). Variables may not change type during execution. Variable types are strict, except for variables of type Object.".
正确的做法是把变量的类型修改Object 或者把字段的类型修改为nvarchar(n) 或者varchar(n)。
但是,当字段的长度大于等于8000字节时,实际上,无法通过变量来传递到其他组件中。

Parameter Size 设置为-1,表示不限制变长字符和binary的长度,但是,实际上,当字节数量大于8000时,无法把Object类型的变量转换为NVARCHAR类型。
SSIS会抛出错误消息,从Object变量中抽取数据时出错:
[Execute SQL Task] Error: Executing the query "insert into dbo.TestDT values(?)" failed with the following error: "An error occurred while extracting the result into a variable of type (DBTYPE_WSTR)".
从数据类型DBTYPE_WSTR中,可以看出,通过EXECUTE SQL TASK 转换的NVARCHAR 和 -1 (Parameter Size),实际上,最大值是NVARCHAR(4000) 或 VARCHAR(8000)。
参考文档:
Integration Services (SSIS) Variables
SSIS 数据类型 第二篇:变量的数据类型的更多相关文章
- Java 第二章 变量、数据类型和运算符
第二章 变量.数据类型和运算符 什么是变量: 变量代表一块内存区域,变量类型不一样,这一块内存的大小也不一样. #在编程语言里面,你可以通过定义变量,向内存里添加数据或者修改内存已有的数据. ...
- Python第二章-变量和数据类型
变量和数据类型 一.什么是变量,常量 思考:程序执行指的是什么? 对数据进行存储处理和计算,最终获得结果,这是程序执行的本质. 变量的概念和在数学中的变量的概念一样的,只是在计算机程序中,变量不仅可以 ...
- Java学习第一篇:变量,数据类型,运算符,流程控制(简介)
一.安装和配置jdk 1.jdk是什么? (1).jdk全称是Java Development Kit, Java开发工具包; (2).jdk是sun公司开发的; (3).jdk主要包括:jre(Ja ...
- 第二篇:Python数据类型
一.引子 1.什么是数据? x= #是我们要存储的数据 2.为何数据要分不同的类型 数据是用来表示状态的,不同的状态就应该用不同的类型的数据去表示 3.数据类型 数字(整型,长整型,浮点型,复数) 字 ...
- JS 01 变量_数据类型_分支循环_数组
点击直通车↓↓↓ 数据类型及数据类型的手动转换 数组 一.概念 JavaScript(JS)是一种基于对象和事件驱动.且可以与HTML标记语言混合使用的脚本语言,其编写的程序可以直接在浏览器中解释执 ...
- ES6学习 第二章 变量的解构赋值
前言 该篇笔记是第二篇 变量的解构赋值. 这一章原文链接: 变量的解构赋值 解构赋值 ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring). 解构 ...
- 第二篇.1、python基础之数据类型与变量
一.变量 1 什么是变量之声明变量 #变量名=变量值 age=18 gender1='male' gender2='female' 2 为什么要有变量 变量作用:“变”=>变化,“量”=> ...
- Java基础复习之一篇:关健字,标识符,注释,常量,进制转换,变量,数据类型,数据类型转换
1.关健字 1.1.被Java语言赋予特定意义的单词(如:class,interface,public ,static) 1.2.全部是小写 1.3.注意事项(goto和const作为关健字保留起来) ...
- Python学习之路【第二篇】-pyc简介、Python常用的数据类型及其用法和常用运算符
1.pyc简介 python程序在运行时也有编译过程,编译后会产生.pyc文件.这是一种由python虚拟机执行的二进制文件(字节码),用于保存内存中PyCodeObject,以便加快程序的加载运行. ...
随机推荐
- 【Python】Django2.0集成Celery4.1详解
环境准备 Python3.6 pip install Django==2.0.1 pip install celery==4.1.0 pip install eventlet (加入协程支持) 安装e ...
- dp (1)
D - Tree of Tree ZOJ - 3201 这个题目我开始是这么定义的dp[i][j][0] dp[i][j][1] 表示对于第i个节点还有j个的选择 0 代表不选这个节点,1 代表选这个 ...
- Vuel路由跳转动画
1.App.vue中添加 <transition :name="animate"> <router-view/> </transition> e ...
- 异常: java.lang.ClassNotFoundException: org.springframework.web.util.IntrospectorCleanupListener
如果出现这个错误信息,如果你的项目是Maven结构的,那么一般都是你的项目的Maven Dependencies没有添加到项目的编译路径下 解决办法: ①选中项目->右键Properties-& ...
- 解决使用nlpir分词,遇到License过期问题
问题:使用pynlpir分词,遇到License过期问题 抛出异常:pynlpir.LicenseError: Your license appears to have expired. Try ru ...
- Android 源码结构分析
源码版本:AOSP_7.1.1 硬件平台:Rockchip 由于工作要求,需要对rockchip平台的安卓系统进行剪裁.安卓源码比较庞大,会让人感到无从下手,对此,有必要了解一下源码的大致目录结构以及 ...
- Java网络小结
1,定位 IP对机器的定位 端口对软件的定位(65535) URL对软件上每一份资源的定位 2,TCP和UDP TCP 安全,性能低 ①ServerSocket②Socket UDP不安全,性能高 ① ...
- 05JAVA基础方法
一.格式 函数有返回值 public static 返回类型 方法名(参数类型 形参1,参数类型 形参2){ 函数体; return 返回值;//返回值必须是定义的返回类型 } 函数没有有返回值 pu ...
- 站在CSS3的肩上定义选择器
按上下文选择元素 按祖先元素选择要格式化的元素 输入ancestor,这里的ancestor是希望格式化的元素的祖先元素的选择器. 输入一个空格(必不可少). 如果需要,对后续的每个祖先元素重复第(1 ...
- 未联网下,在eclipse中编辑xml文件如何自动提示设置
断网情况下,用eclipse编辑xml文件如何自动提示? 以编辑hibernate中的xml为例: 首先,我们都知道xml提示是引用.dtd文件的. 1.复制这个dtd路径,设置eclipse属性,搜 ...