天天看點

變量在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 '20050101','20060101'
UNION ALL
SELECT '20060101','20070101'
UNION ALL
SELECT '20070101','20080101'
GO      

View Code

一、變量的使用

1、建立一個Integration Services 項目SSISForVariable

2、建立變量

菜單欄->SSIS->變量(或控制流空白區域右擊->變量)調出變量視窗,建立兩個日期變量

3、建立連接配接管理器

建立兩個OLE DB連接配接AdventureWorks2012、DBA_Monitor

變量在SSIS包中的使用

4、添加資料流任務->添加OLEDB源、OLEDB目标

編輯OLEDB源配置如圖所示,點選參數,修改參數與變量的映射關系

變量在SSIS包中的使用

編輯OLEDB目标,調整輸入列與輸出列的映射關系

變量在SSIS包中的使用
變量在SSIS包中的使用

5、運作包,查詢目标表記錄

變量在SSIS包中的使用
變量在SSIS包中的使用

6、将上述OLEDB源中的SQL指令封裝成存儲過程,代碼如下:

1 use [AdventureWorks2012]
2 create proc pro_GetProduct
3 @StartDate datetime,
4 @EndDate datetime
5 as
6 select ProductID,Name,ProductNumber,Color,ListPrice from Production.Product
7 where SellStartDate>@StartDate and SellStartDate<@EndDate      

View Code

執行存儲過程得到結果如下:

變量在SSIS包中的使用

将OLEDB源中的SQL指令修改成存儲過程形式,運作失敗!

變量在SSIS包中的使用
變量在SSIS包中的使用

修改參數名字為存儲過程所定義的參數(必須保持完全一緻,包括大小寫,變量資料類型與存儲過程中的保持一緻),運作通過。

變量在SSIS包中的使用

上面的過程在申明變量的時候就給變量指派。還可以用另外兩種方式給變量指派,一種是通過執行 SQL 任務元件傳回值的方式給變量指派,一種是通過腳本元件來給變量指派。

二、變量另外兩種指派方式

1、通過執行 SQL 任務元件

添加執行 SQL 任務,編輯任務,在正常頁面->SQL語句 可以從相關的表中取資料。這裡為了友善,直接select 常量(為了展現不一樣,取06年到07年的資料),ResultSet選擇單行。結果集頁面添加查詢語句傳回列與變量的對應關系。

變量在SSIS包中的使用
變量在SSIS包中的使用

運作包,得到了06-07年的資料,當然可以參照前面調整OLEDB源中的代碼。

變量在SSIS包中的使用

--22:11 2014/5/19 補充

'執行SQL任務'也可以是一個傳回多條記錄的結果集,利用'Foreach 循環容器'循環這個結果集的每一條記錄,根據這條記錄的某幾個字段執行'資料流任務'。

首先添加一個Object類型的變量ResultList用來存儲傳回的主結果集:

變量在SSIS包中的使用

'執行SQL任務'->正常->SQL語句 從相關的表中取資料,ResultSet選擇完整結果集:

變量在SSIS包中的使用

參數映射,将主結果集中傳回的字段按需要map到相應的定義好的變量上,記得Direction設為Input(有人說要設成Output,但我用Output測試就出錯)。ParameterName一定要是數字,并以0開始與主結果集中的字段相對應。下圖是我的主結果集及映射關系:

變量在SSIS包中的使用

結果集頁,增加一個Result,ResultName一定要設定成0,VariableName為我們之前定義好的ResultList:

變量在SSIS包中的使用

增加一個'Foreach 循環容器'控件,編輯容器屬性

切換到集合頁,将Enumerator設定為Foreach ADO 枚舉器以循環結果集。ADO 對象源變量選擇ResultList。選擇Rows in the first table,如下圖:

變量在SSIS包中的使用

變量映射頁,配置變量的對應關系,其中Index跟前面的配置要對應:

變量在SSIS包中的使用

在容器内添加資料流任務,便可循環執行操作:

變量在SSIS包中的使用

2、通過腳本元件

暫時沒用過,略...

轉載于:https://www.cnblogs.com/Uest/p/3735475.html