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,以便加快程序的加载运行. ...
随机推荐
- Jenkins 项目构建
一:新建项目 (1)点击新建,输入项目名称--构建一个自由风格的软件项目,点击ok (2)构建触发器-----设置每两分钟执行一次 其中有5个参数 (*****) 第一个是代表分钟 一小时内的分钟数 ...
- docker 生产环境基础应用
项目背景 此项目是在已有项目基础上,开发的一套相对独立的系统.项目总体分为三部分,前端.中间应用服务.流媒体服务.前端技术选型为vue+elementui,中间应用服务为.net core webap ...
- 支付宝小程序serverless---插入数据后获取数据的主键_id(mongodb)
支付宝小程序serverless---插入数据后获取数据的主键_id(mongodb) 博客说明 文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除, ...
- Linux权限管理、系统进程管理
权限管理 linux系统中分为四种角色 u=user 当前用户 g=group 同组用户 o=other 其他用户 a=all 代表所有用户 三种权限 r=read 可读 w=write ...
- Spring官网阅读(十)Spring中Bean的生命周期(下)
文章目录 生命周期概念补充 实例化 createBean流程分析 doCreateBean流程分析 第一步:factoryBeanInstanceCache什么时候不为空? 第二步:创建对象(crea ...
- 剑指offer--(根据前序遍历和中序遍历)重建二叉树
题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7, ...
- leetcode485——最大连续1的个数(easy)
一.题目描述 给定一个二进制数组, 计算其中最大连续1的个数. 示例 1: 输入: [1,1,0,1,1,1] 输出: 3 解释: 开头的两位和最后的三位都是连续1,所以最大连续1的个数是 3. 注意 ...
- Java 多线程启动为什么调用 start() 方法而不是 run() 方法?
多线程在工作中多多少少会用到,我们知道启动多线程调用的是 start() 方法,而不是 run() 方法,你知道原因吗? 在探讨这个问题之前,我们先来了解一些多线程的基础知识~ 线程的状态 Java ...
- Java 将鼠标改为图片的两种方法
一 图片跟着鼠标移动,鼠标隐藏 int x,y; addMouseMotionListener(this);//设置鼠标监听 public void paint(Graphics g) { g.dr ...
- 网页爬虫--python3.6+selenium+BeautifulSoup实现动态网页的数据抓取,适用于对抓取频率不高的情况
说在前面: 本文主要介绍如何抓取 页面加载后需要通过JS加载的数据和图片 本文是通过python中的selenium(pyhton包) + chrome(谷歌浏览器) + chromedrive(谷歌 ...