變量在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

4、添加數據流任務->添加OLEDB源、OLEDB目標
編輯OLEDB源配置如圖所示,點擊參數,修改參數與變量的映射關系

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

5、運行包,查詢目標表記錄

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

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

將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、通過腳本組件
暫時沒用過,略...


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM