我已經面對和處理過這樣的請求。否,SSIS不會允許您動態列映射。所以,我曾試圖對以下線的東西:
您需要首先使用您的系統的知識放在一起排序配置表中,將告訴你下面的東西 -
- 源表(sourceTable會)
-Columns從源表(SourceQuery)
HINT提取:甲SELECT
query..egSELECT ID, Name, Salary from dbo.tblEmployee
-Destination表(destinationTable會)
-Columns需要被從源
-Few其他細節,如服務器名稱/連接的屬性等供給..
您需要稍後使用ForEach
循環容器遍歷該表的各行。
接下來,在可能需要提取的源中確定這些列中的最大列數和最大數據類型長度。您需要儘快創建一個包含信息的表格。
創造一種臨時表的假設StgData
。我將使用50列創建此表,所有數據類型爲NVARCHAR(MAX)
。該CREATE
語句應該是這樣的:
CREATE TABLE StgData
(
Column1 NVARCHAR(MAX),
Column2 NVARCHAR(MAX),
Column3 NVARCHAR(MAX),
....
Column50 NVARCHAR(MAX)
)
的原始數據將被加載到StgData
。
- 現在有一個ForEach循環容器遍歷
ETLMappings
。 在這裏面,您將不得不使用Execute SQL Task
中的INSERT
語句來加載數據。
裏面的任務腳本看起來像: -
INSERT INTO dbo.StgData
?
?
對應SourceQuery
柱(應當由ForEach
容器被捕獲
一旦StgData被加載,它應該。被用於加載DestinationTable
(也被捕獲在ForEach
環形容器中)
現在你又需要對模式和列映射有很好的理解。配置表應該有一個存儲SQL查詢的列形式
INSERT INTO DestTable1 SELECT Col1, CAST(Col2 as float) Col2 FROM StgData
這些行上的內容。
這只是一個基本的結構。當然很多格式和定製都必須添加。
對於具有相同元數據的不同表格。您不能動態更改元數據。 – mxix