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,以便加快程序的加载运行. ...
随机推荐
- docker学习笔记一篇就通系列(持续更新)
docker三要素 仓库 镜像 容器 仓库 仓库用来存放docker的镜像,类似于github存放代码医养 镜像 镜像是一个模板,封装了应用程序和配置依赖的可交付的运行环境,这个打包好的运行环境就是镜 ...
- Spring Cloud学习 之 Spring Cloud Hystrix(断路器原理)
断路器定义: public interface HystrixCircuitBreaker { // 每个Hystrix都通过它判断是否被执行 public boolean allowRequest( ...
- Coursera课程笔记----P4E.Capstone----Week 6&7
Visualizing Email Data(Week 6&7) code segment gword.py import sqlite3 import time import zlib im ...
- Blazor入门:ASP.NET Core Razor 组件
目录 关于组件 组件类 静态资产 路由与路由参数 组件参数 请勿创建会写入其自己的组参数属性的组件 子内容 属性展开 任意参数 捕获对组件的引用 在外部调用组件方法以更新状态 使用 @ 键控制是否保留 ...
- c++11 符号修饰与函数签名、函数指针、匿名函数、仿函数、std::function与std::bind
一.符号修饰与函数签名 1.符号修饰 编译器将c++源代码编译成目标文件时,用函数签名的信息对函数名进行改编,形成修饰名.GCC的C++符号修饰方法如下: 1)所有符号都以_z开头 2)名字空间的名字 ...
- 小程序如何动态修改标题navigationBarTitleText
首先我们先设置标题.进入页面所在的json文件加入以下代码即可成功设置: "navigationBarTitleText": "我是标题啊!", 然后修改这个标 ...
- An SWT error has occurred
对话框标题:Problem Occurred 对话框内容:Unhandled event loop exception No more handles 对话框按钮:第一个超链接:Show Error ...
- fragment hide/show 生命周期
Fragment的使用越来越普遍了,掌握它的生命周期以及注意事项时非常有必要的,首先 All subclasses of Fragment must include a public empty co ...
- FF按钮点击后表单提交
如果发现<button>提交</button>点击后,所在的表单在ff中自动提交了,则需要添加属性 type='button'! 我也是百度的,记在这里以后方便查看!
- MySQL事务操作
在 MySQL 命令行的默认设置下,事务都是自动提交的,即执行 SQL 语句后就会马上执行 COMMIT 操作.因此要显式地开启一个事务务须使用命令 BEGIN 或 START TRANSACTION ...