2013-09-25 49 views
0

使用ForEach循環容器通過XML節點循環下面是我的XML文件通過SSIS

<?xml version="1.0" encoding="ISO-8859-1"?> 
<DataResult> 
    <Data> 
    <Name lang="eng">Reshma</Name> 
    <Birth Date>1988-09-23T00:00:00</Birth Date> 
    </Data> 
<Data> 
    <Name lang="eng">Rahul</Name> 
    <Birth Date>1991-09-23T00:00:00</Birth Date> 
</Data> 
</DataResult> 

我想讀這個XML節點值到每個循環容器,下面是我的每個循環容器設置,

enter image description here

現在我想從上面的XML文件中讀取名稱節點值,輸入值轉換成數據庫,我不能採取單一變量先讀第一名稱節點值到它並更新數據庫,並再次由另一個重寫相同的變量名稱節點和更新數據庫,因爲我的主要xml文件將有n個號碼名稱節點。

我的主要目標是讀取到foreach循環的xml文件節點,嘗試了很多,但無法獲得解決方案,任何幫助將不勝感激。

+0

我不確定你是否真的需要* foreach容器。爲什麼不通過「XML Source」讀取整個文件,然後使用「OLE DB Command」(每行數據將執行一次),並使用帶有相應WHERE條件的UPDATE語句? (如果您有任何問題,請告訴我) – TsSkTo

+0

@TsSkTo ..當我使用XML源時,我無法獲得OLEDB Destination中的名稱值,它顯示了一些警告,如最大長度爲爲xml source.output指定具有外部數據類型system.string的[Name] .columns [lang]。將使用長度爲255的ssis數據流任務數據類型「DT_WSTR」,以及爲什麼要使用sql命令,無法通過OLEDB目標直接將數據插入到數據庫中。 – Reshma

回答

0

這是一個可能的解決方案,可能是閃避實際問題。

就像我在評論中提到的,我不認爲你實際上需要「foreach容器」。使用「XML源」直接導入所有數據。接下來,根據您的「DT_WSTR」錯誤,我建議您使用「數據轉換」或「派生列」組件來爲您的列添加最大長度。

enter image description here

最後,您可以使用「OLE DB目標」,如果你是插入數據到一個表。我的印象是,你想更新一些現有的數據,在這種情況下,我一直使用帶有UPDATE語句的「OLE DB命令」。

+0

@TsSkTo ...謝謝一個lottt,它工作,這麼簡單的解決方案,正在努力執行sql任務,爲每個循環和所有,但同時,我學到了很多東西,再次感謝你。 – Reshma