变量在SSIS包中的使用
2010~2011年经常使用SSIS包采集加工数据,后来换了工作就很少使用。
最近又开始用那玩意采集数据,努力回想之前是怎样操作的,网上各种找各种纠结。趁这次使用记录下日常操作步骤,以备以后不时之需。
--环境SQL Server2012、VS2010(安装数据库时默认会安装)
下载示例数据库AdventureWorks2012,还原数据库并创建目标表。
--还原数据库
CREATE DATABASE [AdventureWorks2012] ON
(FILENAME=N'D:\SQL2012\MSSQL11.SQL12\MSSQL\DATA\AdventureWorks2012_Data.mdf')
FOR ATTACH
GO
USE [DBA_Monitor]
GO
--时间段配置表
CREATE TABLE [dbo].[SSIS_Configuration](
[Id] [int] IDENTITY(1,1) NOT NULL,
[StartDate] [datetime] NULL,
[EndDate] [datetime] NULL
) ON [PRIMARY]
GO
--OLE DB目标表
CREATE TABLE [dbo].[SSIS_Product](
[ProductID] [int] NOT NULL,
[Name] [nvarchar](50) NOT NULL,
[ProductNumber] [nvarchar](25) NOT NULL,
[Color] [nvarchar](15) NULL,
[ListPrice] [money] NOT NULL,
[SellStartDate] [datetime] NULL
) ON [PRIMARY]
GO
--插入时间段配置数据
INSERT INTO [dbo].[SSIS_Configuration](StartDate,EndDate)
SELECT '',''
UNION ALL
SELECT '',''
UNION ALL
SELECT '',''
GO
一、变量的使用
1、新建一个Integration Services 项目SSISForVariable
2、创建变量
菜单栏->SSIS->变量(或控制流空白区域右击->变量)调出变量窗口,创建两个日期变量
3、创建连接管理器
新建两个OLE DB连接AdventureWorks2012、DBA_Monitor
4、添加数据流任务->添加OLEDB源、OLEDB目标
编辑OLEDB源配置如图所示,点击参数,修改参数与变量的映射关系
编辑OLEDB目标,调整输入列与输出列的映射关系

5、运行包,查询目标表记录

6、将上述OLEDB源中的SQL命令封装成存储过程,代码如下:
use [AdventureWorks2012]
create proc pro_GetProduct
@StartDate datetime,
@EndDate datetime
as
select ProductID,Name,ProductNumber,Color,ListPrice from Production.Product
where SellStartDate>@StartDate and SellStartDate<@EndDate
执行存储过程得到结果如下:
将OLEDB源中的SQL命令修改成存储过程形式,运行失败!

修改参数名字为存储过程所定义的参数(必须保持完全一致,包括大小写,变量数据类型与存储过程中的保持一致),运行通过。
上面的过程在申明变量的时候就给变量赋值。还可以用另外两种方式给变量赋值,一种是通过执行 SQL 任务组件返回值的方式给变量赋值,一种是通过脚本组件来给变量赋值。
二、变量另外两种赋值方式
1、通过执行 SQL 任务组件
添加执行 SQL 任务,编辑任务,在常规页面->SQL语句 可以从相关的表中取数据。这里为了方便,直接select 常量(为了体现不一样,取06年到07年的数据),ResultSet选择单行。结果集页面添加查询语句返回列与变量的对应关系。

运行包,得到了06-07年的数据,当然可以参照前面调整OLEDB源中的代码。
--22:11 2014/5/19 补充
'执行SQL任务'也可以是一个返回多条记录的结果集,利用'Foreach 循环容器'循环这个结果集的每一条记录,根据这条记录的某几个字段执行'数据流任务'。
首先添加一个Object类型的变量ResultList用来存储返回的主结果集:
'执行SQL任务'->常规->SQL语句 从相关的表中取数据,ResultSet选择完整结果集:
参数映射,将主结果集中返回的字段按需要map到相应的定义好的变量上,记得Direction设为Input(有人说要设成Output,但我用Output测试就出错)。ParameterName一定要是数字,并以0开始与主结果集中的字段相对应。下图是我的主结果集及映射关系:
结果集页,增加一个Result,ResultName一定要设置成0,VariableName为我们之前定义好的ResultList:
增加一个'Foreach 循环容器'控件,编辑容器属性
切换到集合页,将Enumerator设置为Foreach ADO 枚举器以循环结果集。ADO 对象源变量选择ResultList。选择Rows in the first table,如下图:
变量映射页,配置变量的对应关系,其中Index跟前面的配置要对应:
在容器内添加数据流任务,便可循环执行操作:
2、通过脚本组件
暂时没用过,略...
变量在SSIS包中的使用的更多相关文章
- 在SSIS包中使用 Checkpoint从失败处重新启动包[转]
使用SSIS做ETL的过程中会遇到各种各样的错误,对于一些大数据量的Job失败以后我们不希望重新运行,因为重新运行的时间开销是非常大的,我们只希望从失败的部分开始运行,这样可以省去很多的时间. SSI ...
- 在SSIS包中的事务处理
在处理SSIS包的数据ETL操作过程中,我们经常遇到的一个问题就是一系列步骤在运行的过程中,如果中间的一个步骤失败了,那么我们就需要清理前面已经运行过的步骤所产生的数据或者结果,这往往是一个很头疼的过 ...
- 在SSIS包中使用 Checkpoint从失败处重新启动包
使用SSIS做ETL的过程中会遇到各种各样的错误,对于一些大数据量的Job失败以后我们不希望重新运行,因为重新运行的时间开销是非常大的,我们只希望从失败的部分开始运行,这样可以省去很多的时间. SSI ...
- SSIS从理论到实战,再到应用(3)----SSIS包的变量,约束,常用容器
原文:SSIS从理论到实战,再到应用(3)----SSIS包的变量,约束,常用容器 上期回顾: SSIS从理论到实战,再到应用(2)----SSIS包的控制流 首先我们来看看包里面的变量 SSIS ...
- 图解:SQL Server SSIS包和job的部署攻略
原文:图解:SQL Server SSIS包和job的部署攻略 以下将建立一个SQL Server SSIS包 然后在job中使用这个包,并将job部署到目标机器 1. 首先建立ssis包,使用sql ...
- dtexec命令执行SSIS包
默认情况下,同时安装了 64 位和 32 位版本的 Integration Services 命令提示实用工具的 64 位计算机将在命令提示符处运行 32 位版本.运行 32 位版本的原因是:在 PA ...
- 在 SSIS package 中使用FTP
在ssis 包中使用FTP 实际上很简单, 直接拿一个FTP控制流(FTP 任务) ,配置一下FTP 服务器就可以了, 但是当我想在SQL Server Job 中使用这个功能时却报了个错(如下), ...
- [转]一步一步部署SSIS包图解教程
本文就SQL统计分析SSIS包的部署进行一次详细的部署图解教程,Sql Server Integration Services 提供了非常简单的部署工具,利用这些工具可以方便地将包文件(*.dtsx) ...
- 一步一步部署SSIS包图解教程
本文就SQL统计分析SSIS包的部署进行一次详细的部署图解教程,Sql Server Integration Services 提供了非常简单的部署工具,利用这些工具可以方便地将包文件(*.dtsx) ...
随机推荐
- 洛谷 P1462 通往奥格瑞玛的道路 Label: 最小化最大值 && spfa (存多条边示例)
题目背景 在艾泽拉斯大陆上有一位名叫歪嘴哦的神奇术士,他是部落的中坚力量 有一天他醒来后发现自己居然到了联盟的主城暴风城 在被众多联盟的士兵攻击后,他决定逃回自己的家乡奥格瑞玛 题目描述 在艾泽拉斯, ...
- canvas基础之旅
canvas 主要使用2D rendering context API 实现其功能和特效. canvas 一般浏览器都支持,但在ie9之前的是不支持的.(解决办法:添加IxplorerCanvas ...
- Codeforces Beta Round #5
A题,无聊的题目. #include <cstdio> #include <string> #include <cstring> #include <cmat ...
- 【异常】java.lang.LinkageError: loader constraints violated
[问题背景] 南非客户帐单提醒功能过程中的一个问题,当启动服务器后,后台报java.lang.LinkageError: loader constraints violated when l ...
- IOS开发常用设计模式
IOS开发常用设计模式 说起设计模式,感觉自己把握不了笔头,所以单拿出iOS开发中的几种常用设计模式谈一下. 单例模式(Singleton) 概念:整个应用或系统只能有该类的一个实例 在iOS开发我们 ...
- C语言break和continue
break和continue C语言中有有两种结束循环的关键字:break和continue #include <stdio.h> #include <stdlib.h> in ...
- Linux常见练习题
1./dev/hda5在Linux中表示什么? A. IDE0接口上从盘 B. IDE0接口上主盘的逻辑分区 C. IDE0接口上主盘的第五个分区 D.IDE0接口上从盘的扩展分区 ...
- 用GruntJS合并、压缩JS文件
为什么要合并.压缩你的JS文件? 一个项目开发完成我们总能发现有一堆js文件非常混乱. 一般在一个HTML文档加载的时候,浏览器会根据HTML代码从上到下读取所需要加 ...
- 使用Eclipse构建Maven项目 (step-by-step)
Maven这个个项目管理和构建自动化工具,越来越多的开发人员使用它来管理项目中的jar包.本文仅对Eclipse中如何安装.配置和使用Maven进行了介绍.完全step by step. 如果觉得本文 ...
- Maven进价:Maven的生命周期阶段
一.Maven的生命周期 Maven的生命周期就是对所有的构建过程进行抽象和统一.包含了项目的清理.初始化.编译.测试.打包.集成测试.验证.部署和站点生成等几乎所有的构建步骤. Maven的生命周期 ...