2011-02-24 54 views
1

我有一系列由狀態和信息類型生成的數據。例如,對於每個狀態,都有3個文件名中有一個標識符的文件,告訴我它是用於哪個信息組。這些文件中的數據由根據文件類型具有不同長度的數據行組成。類型1總是有245逗號分隔值,類型2有215,類型3有300.基於源CSV文件名的條件數據流

我有3個單獨的SSIS 2005包設置爲導入此數據,但我想知道是否有一種方法可以在一個打包包含條件拆分或腳本任務。 我嘗試了條件拆分,但它看起來像我期望不得不檢查行值。然後我查看了使用腳本任務的代碼here。我無法獲得此代碼,因爲它抱怨「DTS未被定義」。這可能是作者認爲我對他的某些基本知識有一定了解的情況之一,而且我沒有這方面的知識。 我已經修改了代碼,那裏是:

Imports System 
Imports System.Data 
Imports System.Math 
Imports System.IO 
Imports Microsoft.SqlServer.Dts.Runtime 

Public Class ScriptMain 
    ' Created: Zack Bethem – AmberLeaf 
    Public Sub Main() 
     Dim fileLoc, fileName As String 
     If Dts.Variables.Contains("User::fileName") = True Then 
      fileName = CStr(Dts.Variables.Item("User::fileName").Value) 
      If fileName.Contains("0074000") Then 
       Dts.Variables.Item("User::SexByInd").Value = True 
      ElseIf fileName.Contains("0072000") Then 
       Dts.Variables.Item("User::SexByOcc").Value = True 
      ElseIf fileName.Contains("0022000") Then 
       Dts.Variables.Item("User::Migration").Value = True 
      End If 
      Dts.TaskResult = Dts.Results.Success 
     Else 
      Dts.TaskResult = Dts.Results.Failure 
     End If 
    End Sub 
End Class 

正如你可以從代碼中看到: 我使用一個For Each循環遍歷該目錄中的文件。 我將每個文件的文件名分配到User::fileName,然後檢查文件名是否包含3個字符串元素之一。 如果它包含類型1,那麼它將轉到不同於Type2/Type3的分支,等等。

由於此代碼不能編譯我無法檢查其他示例是否可用。我不確定他正在使用什麼類型的腳本任務,因爲我提供了3個選項,但都涉及對作爲腳本任務輸入的行或行元素數據的某種操縱。我想要做的是通過User::fileName作爲輸入,然後測試其他3 User::變量的布爾值以構成3個分支。

我現在的想法是這樣的: 裏面一個for each循環有這個數據流任務:

  Scripting Task 
    /  |   \ 
    (Type1) (Type2)  (Type3) 
    |   |   | 
CSV_Files1 CSV_Files2 CSV_Files3 
    |   |   | 
OLEDB_Dest1 OLEDB_Dest2 OLEDB_Dest3 

凡CSV_Files1-3採用獨特的SourceConnectionFlat文件讀取/映射列到OLEDB_Dest表。

EDITS: Design Script Error

回答

2

在控制流腳本任務,你可以檢查文件名(在這裏變量),並設置了一個名爲Type變量...

If Dts.Variables("User::FilePath").Value.ToString.Contains("cl") Then 
     Dts.Variables("User::Type").Value = 1 
    Else 
     Dts.Variables("User::Type").Value = 2 
    End If 

    Dts.TaskResult = Dts.Results.Success 

然後使用先驗約束(雙擊約束線)檢查腳本任務的成功和Type變量的值,如下所示。

enter image description here

流程將類似於此,每個約束檢查類型的不同值...

enter image description here

您可以通過刪除此爲每個任務循環您的文件夾並設置FilePath變量。

+0

好的,這是一個在這裏的主題和可行的變化。問題是「DTS.Variable」代碼不「工作」。設計腳本窗口指出:名稱「DTS」未聲明「。因爲這不能編譯,我不能繪製約束線。另外,因爲沒有指定輸入或輸出列,它不會讓我「畫線」。 – wergeld 2011-02-24 18:20:49

+0

您能向我們展示完整的錯誤或其屏幕截圖嗎? – grapefruitmoon 2011-02-24 18:21:46

+0

實際上,它看起來像是在腳本組件中作爲數據流的一部分執行此操作,而不是控制流中的腳本任務......這是否正確?上面的代碼需要在腳本任務中。 – grapefruitmoon 2011-02-24 18:26:36