2011-09-28 35 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>