【问题标题】:How SQL sets the value and attributes of the same node in XMLSQL如何设置XML中同一个节点的值和属性
【发布时间】:2020-03-29 14:04:46
【问题描述】:

我们有这个代码:

SELECT          
    (SELECT
         'infor' AS [Process/TenantID],
         (SELECT 
              ROW_NUMBER() OVER(ORDER BY gld_serial_no ASC) as [@sequence],
              (SELECT TOP (1) 
                   '1' AS [DimensionCode/@sequence],
                   gld_dim1 AS [DimensionCode] 
               FROM 
                   slr_gl_dta_paid 
               GROUP BY 
                   gld_dim1
               FOR XML PATH ('DimensionCode'), TYPE) AS [DimensionCodes]
          FROM 
              slr_gl_dta_paid
          FOR XML PATH ('JournalEntryLine'), TYPE) AS [SourceSystemJournalEntry]
      FOR XML PATH ('DataArea'), type
  ) 
  FOR XML PATH (''), ROOT('ProcessSourceSystemJournalEntry')

结果是这样的:

<ProcessSourceSystemJournalEntry>
    <DataArea>
        <Process>
            <TenantID>infor</TenantID>
        </Process>
        <SourceSystemJournalEntry>
            <JournalEntryLine sequence="1">
                <DimensionCodes>
                    <DimensionCode>
                        <DimensionCode sequence="1">CD53</DimensionCode>
                    </DimensionCode>
                </DimensionCodes>
            </JournalEntryLine>
            <JournalEntryLine sequence="2">
                <DimensionCodes>
                    <DimensionCode>
                        <DimensionCode sequence="1">CD99</DimensionCode>
                    </DimensionCode>
                </DimensionCodes>
            </JournalEntryLine>
        </SourceSystemJournalEntry>
    </DataArea>
</ProcessSourceSystemJournalEntry>

但是我们需要这样的结果:

<ProcessSourceSystemJournalEntry>
    <DataArea>
        <Process>
            <TenantID>infor</TenantID>
        </Process>
        <SourceSystemJournalEntry>
            <JournalEntryLine sequence="1">
                <DimensionCodes>
                    <DimensionCode sequence="1">CD53</DimensionCode>
                </DimensionCodes>
            </JournalEntryLine>
            <JournalEntryLine sequence="2">
                <DimensionCodes>
                    <DimensionCode sequence="1">CD99</DimensionCode>
                </DimensionCodes>
            </JournalEntryLine>
        </SourceSystemJournalEntry>
    </DataArea>
</ProcessSourceSystemJournalEntry>

如何做到这一点?

【问题讨论】:

    标签: sql sql-server xml xpath


    【解决方案1】:

    试试这个:

    SELECT
        1 AS 'DimensionCode/@sequence',
        gld_dim1 AS DimensionCode
    FROM 
        gl_dta
    GROUP BY   
        gld_dim1
    FOR XML PATH('DimensionCodes'), ROOT('JournalEntry')
    

    这应该创建一个&lt;DimensionCode&gt; 元素,其中包含作为元素文本的gld_dim1 值,以及一个sequence 属性。

    【讨论】:

    • 也许应该注意必须首先呈现属性。
    • 抱歉过于简单化了。我更新了我的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-22
    • 1970-01-01
    • 1970-01-01
    • 2021-02-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多