2011-09-28 66 views
0

我完全不熟悉(VB)腳本,並試圖在SSIS腳本組件中找到一種方式將3個輸入列轉換爲一個XML結構化輸出列。SSIS - VB腳本組件將輸入轉換爲XML

Input: 

ID NAME DATE 
1 AAA  2011-01-01 
2 BBB  2011-02-01 
3 CCC  2011-03-01 


Expected Output: 

<output> 
<row> 
    <id>1</id> 
    <name>AAA</name> 
    <date>2011-01-01</date> 
</row> 
<row> 
<id>2</id> 
    <name>BBB</name> 
    <date>2011-02-01</date> 
</row> 
<row> 
    <id>3</id> 
    <name>CCC</name> 
    <date>2011-03-01</date> 
</row> 
</output> 

該解決方案即時尋找需要可擴展性,因爲可以有列x個,只是需要通過每列迭代並生成名稱標籤和值的腳本。

我有一種通過輸出每個值到一個通用的「參數」節點,但我不確定如何獲得列名。

Public Overrides Sub ProcessInput(ByVal InputID As Integer, ByVal Buffer As Microsoft.SqlServer.Dts.Pipeline.PipelineBuffer) 

     inputBuffer = Buffer 

     MyBase.ProcessInput(InputID, Buffer) 
    End Sub 

    Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer) 

     Dim xml_string As String = "" 
     Dim counter As Integer 

     xml_string = "<output>" 

     For counter = 0 To inputBuffer.ColumnCount - 1 

      xml_string = xml_string + "<param>" + inputBuffer.Item(counter).ToString() + "</param>" 

     Next 

     xml_string = xml_string + "<output>" 

     Row.xmloutput = xml_string 

    End Sub 
+0

找到我的答案在這裏:http://agilebi.com/jwelch/2007/06/03/xml-變換部分-2 / – shakedown7

回答

1

SQL代碼:

SELECT [ID] 
    ,rtrim([Name]) [Name] 
    ,[Date] 
    FROM [tempdb].[dbo].[Table1] 
    FOR XML PATH('row'), ROOT ('output') 

我得到這個輸出

<output> 
    <row> 
     <ID>1</ID> 
     <Name>AAA</Name> 
     <Date>2011-01-01</Date> 
    </row> 
    <row> 
     <ID>2</ID> 
     <Name>BBB</Name> 
     <Date>2011-02-01</Date> 
    </row> 
    <row> 
     <ID>3</ID> 
     <Name>CCC</Name> 
     <Date>2011-03-01</Date> 
    </row> 
    </output>