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包中的使用的更多相关文章

  1. 在SSIS包中使用 Checkpoint从失败处重新启动包[转]

    使用SSIS做ETL的过程中会遇到各种各样的错误,对于一些大数据量的Job失败以后我们不希望重新运行,因为重新运行的时间开销是非常大的,我们只希望从失败的部分开始运行,这样可以省去很多的时间. SSI ...

  2. 在SSIS包中的事务处理

    在处理SSIS包的数据ETL操作过程中,我们经常遇到的一个问题就是一系列步骤在运行的过程中,如果中间的一个步骤失败了,那么我们就需要清理前面已经运行过的步骤所产生的数据或者结果,这往往是一个很头疼的过 ...

  3. 在SSIS包中使用 Checkpoint从失败处重新启动包

    使用SSIS做ETL的过程中会遇到各种各样的错误,对于一些大数据量的Job失败以后我们不希望重新运行,因为重新运行的时间开销是非常大的,我们只希望从失败的部分开始运行,这样可以省去很多的时间. SSI ...

  4. SSIS从理论到实战,再到应用(3)----SSIS包的变量,约束,常用容器

    原文:SSIS从理论到实战,再到应用(3)----SSIS包的变量,约束,常用容器 上期回顾: SSIS从理论到实战,再到应用(2)----SSIS包的控制流   首先我们来看看包里面的变量 SSIS ...

  5. 图解:SQL Server SSIS包和job的部署攻略

    原文:图解:SQL Server SSIS包和job的部署攻略 以下将建立一个SQL Server SSIS包 然后在job中使用这个包,并将job部署到目标机器 1. 首先建立ssis包,使用sql ...

  6. dtexec命令执行SSIS包

    默认情况下,同时安装了 64 位和 32 位版本的 Integration Services 命令提示实用工具的 64 位计算机将在命令提示符处运行 32 位版本.运行 32 位版本的原因是:在 PA ...

  7. 在 SSIS package 中使用FTP

    在ssis 包中使用FTP 实际上很简单, 直接拿一个FTP控制流(FTP 任务) ,配置一下FTP 服务器就可以了, 但是当我想在SQL Server Job 中使用这个功能时却报了个错(如下), ...

  8. [转]一步一步部署SSIS包图解教程

    本文就SQL统计分析SSIS包的部署进行一次详细的部署图解教程,Sql Server Integration Services 提供了非常简单的部署工具,利用这些工具可以方便地将包文件(*.dtsx) ...

  9. 一步一步部署SSIS包图解教程

    本文就SQL统计分析SSIS包的部署进行一次详细的部署图解教程,Sql Server Integration Services 提供了非常简单的部署工具,利用这些工具可以方便地将包文件(*.dtsx) ...

随机推荐

  1. Web App开发入门

    WebApp与Native App有何区别呢? Native App: 1.开发成本非常大.一般使用的开发语言为JAVA.C++.Objective-C. 2.更新体验较差.同时也比较麻烦.每一次发布 ...

  2. 【转】移动web页面支持弹性滚动的3个方案

    传统 pc 端中,子容器高度超出父容器高度,通常使用 overflow:auto 可出现滚动条拖动显示溢出的内容,而移动web开发中,由于浏览器厂商的系统不同.版本不同,导致有部分机型不支持对弹性滚动 ...

  3. [Leetcode|SQL] Combine Two Tables

    Table: Person +-------------+---------+ | Column Name | Type | +-------------+---------+ | PersonId ...

  4. 【POJ】3243 Clever Y

    http://poj.org/problem?id=3243 题意:求$a^y \equiv b \pmod{p}$最小的$y$.(0<=x, y, p<=10^9) #include & ...

  5. fuser 命令的介绍

    fuser 可以显示出当前哪个程序在使用磁盘上的某个文件.挂载点.甚至网络端口,并给出程序进程的详细信息.  fuser显示使用指定文件或者文件系统的进程ID.默认情况下每个文件名后面跟一个字母表示访 ...

  6. POJ 1260 Pearls 简单dp

    1.POJ 1260 2.链接:http://poj.org/problem?id=1260 3.总结:不太懂dp,看了题解 http://www.cnblogs.com/lyy289065406/a ...

  7. 转 Datatables中文API——基本参数

    鉴于自己一直在使用datatables,发现这是个很不错的表格插件,但是好的东西都是英文的,所以我结合自己的使用经验,把官网的英文api做下简单的翻译,同时也希望大家把自己的使用经验一起分享出来,让我 ...

  8. TCP连接探测中的Keepalive和心跳包

    TCP连接探测中的Keepalive和心跳包 tcp keepalive 心跳 保活 Linuxtcp心跳keepalive保活1. TCP保活的必要性 1) 很多防火墙等对于空闲socket自动关闭 ...

  9. android-ImageView及其子类

    一.知识概要 ImageView继承自View,能显示任何Drawable对象; ImageView支持的常用XML属性及相关方法: android:adjustViewBounds    设置Ima ...

  10. ArcGIS 使用点滴记录

    (1)ArcGIS Shapefile数据text类型字段最长为254.若想更长,使用GeoDatabase (2)ArcGIS中出现一些奇奇怪怪的问题,找不到解决方法时,一般考虑是不是空间参考的问题 ...