2017-10-12 108 views
0

如果我在SSIS中有一個字符串變量,其中包含由逗號(或任何其他標準字符)分隔的值列表 - 是否可以將這些值加載到對象變量中然後我可以使用Object變量作爲resultSet枚舉器並遍歷每個值?SSIS - 通過字符串變量填充對象變量

[編輯]只是爲了澄清情況 - 我有約。每個變量包含1個或0個變量 - 每個變量確定是否需要在作業期間處理特定的SSAS表(1 =是,需要處理0 =否,不處理它)。

我現在要做的就是存儲WERE在一個對象變量中處理的表名,然後遍歷該列表,爲每個表單寫入一個日誌條目,以表示它在此作業期間被處理。

[編輯#2] 我沒有解釋這很好,但讓我試着總結 - 這裏是當前形勢:

我有一個變量,名爲strPartitionArray - 這個變量現在包含字符串,通過逗號,由該式求出分離(理解,這有缺陷 - 尤其是如果DimAbsenceUpdate是0,則所有落在分開,但希望能分別計算出該修復):

(
@[User::DimAbsenceUpdate] == 1 ? 
"Absence":"" 
) 

+ (
@[User::DimGradeUpdate] == 1 ? 
",Grade":"" 
) 


+ (
@[User::DimContractUpdate] == 1 ? 
",Contract":"" 
) 

+ (
@[User::DimEmployeeUpdate] == 1 ? 
" ,Employee":"" 
) 

因此,作爲一個例如,現在,該變量的值是:缺席,等級,合同

我需要這個存儲在一個對象變量,以便我可以循環通過這3個條目(缺席,成績,合同)作爲一個SQL任務的一部分,所以,使用下面的代碼,我試圖分裂出那些3字爲對象稱爲RecordProcessDateTime

public void Main() 
    { 
     String tmp = Dts.Variables["User::strPartitionArray"].ToString(); 

     String[] tmpArray = tmp.Split(','); 

     Dts.Variables["User::RecordProcessDateTime"].Value = tmpArray; 

     Dts.TaskResult = (int)ScriptResults.Success; 
    } 

假設上述工程的代碼,然後我想使用作爲RecordProcessDateTime枚舉爲Foreach循環 - 通過每個的那些3個字運行。 容器中的SQL任務將寫入一個日誌條目。該SQL Task的一部分將有問題的單詞(缺席,成績,然後合同)寫入日誌條目 - 基本上讓我知道沒有處理SSAS表。

因此,我已經將腳本,Foreach循環(包含SQL任務)全部放入序列容器中。當我運行序列容器時,它可以工作(!),但只向日志中寫入一個條目(當它應該寫入3時),並且該條目不包含任何3個字,它就包含這個:'Microsoft.SqlServer。 Dts.Runtime.Variable'

我的假設是,腳本實際上並沒有如預期的那樣將這3個值放入Object變量,這就是爲什麼foreach循環只運行一次而不包含任何單詞。

+0

是的,你可以做到這一點。 – KeithL

回答

0

如果在SSIS一個字符串變量,照你這麼說是良好的,你可以簡單地讀取整個字符串轉換成一個字符串

String tmp = Dts.Variables["User::DimAbsence"].ToString(); 

然後只需Split成字符串

數組
String[] tmpArray = tmp.Split(null); /* null means the default separator (whitespace)*/ 

通過這種方式,您可以在相同索引處訪問SSIS中相同邏輯對象的相應變量。

你問題的第二部分對我來說並不陌生,如果你向我澄清一下,我會在你的幫助下。

+0

我已經使用你上面建議的,並重新編輯我的帖子,以更新我現在卡住的點。 – Celador

+0

您的填充數組的方法不太好,因爲如果由於某種原因沒有缺席,則字符串將以「,」開頭,然後該對象的第一個元素將爲空,從而使元素之間分隔「」。 – dbencs

+0

是的,我明白了,我想如果我能讓剩下的工作起作用,那麼我可以在以後解決這個問題! (也許不是最好的開發方法,但我認爲我可以想出一個解決方案)。我現在所做的只是將Absence變量永久設置爲= 1,以便它始終存在(直到我找到解決方法) – Celador

0

使用此鏈接:

SSIS Script Task: Populate object variable from Array

並填充與分割功能的陣列。

+0

Hi @KeithL - 我通讀了這篇文章,以及其中的鏈接,然後沿着c#的一個巨大的兔子洞(其中我完全不知道什麼) - 最終嘗試了一個稍微不同的解決方案,在我原來的文章中作爲編輯概述 - 希望你能幫助得到這個工作 – Celador