0

我正在尝试将以下 XML 生成为表的列:

<root>
    <Address1>
        <Addressline1>Test Road</Addressline1>
        <Addressline2>Test Street</Addressline2>
        <Addressline3>Test Town</Addressline3>
        <Addressline4>Test State</Addressline4>
        <Postcode>Test Postcode</Postcode>
    </Address1>
    <Address2>
        <Addressline1>Test Road</Addressline1>
        <Addressline2>Test Street</Addressline2>
        <Addressline3>Test Town</Addressline3>
        <Addressline4>Test State</Addressline4>
        <Postcode>Test Postcode</Postcode>
    </Address2>
</root>

我几乎可以使用以下 SQL:

select  (1Addressline1,
        1Addressline2,
        1Addressline3,
        1Addressline4,
        1Postcode for xml path('Address'), root('Addresses')) AS Address1,
        (2Addressline1,
        2Addressline2,
        2Addressline3,
        2Addressline4,
        2Postcode for xml path('Address'), root('Addresses')) AS Address2,
        ColumnA
        ColumnB
        ColumnC
From    Addresses

这会产生以下 XML:

<root>
    <Address1>
        <Addressline1>Test Road</Addressline1>
        <Addressline2>Test Street</Addressline2>
        <Addressline3>Test Town</Addressline3>
        <Addressline4>Test State</Addressline4>
        <Postcode>Test Postcode</Postcode>
    </Address1>
</root>,    
<root>
    <Address2>
        <Addressline1>Test Road</Addressline1>
        <Addressline2>Test Street</Addressline2>
        <Addressline3>Test Town</Addressline3>
        <Addressline4>Test State</Addressline4>
        <Postcode>Test Postcode</Postcode>
    </Address2>
</root>,    
ColumnA,
ColumnB,
ColumnC

不正确的是生成两个单独的 XML 列。我现在需要像上面那样在根节点下组合 Address1 和 Address 2,但无法解决或找到正确的语法。

编辑:正如建议的那样,我已将我的代码修改为这给出了许多语法错误:

SELECT      ColumnA,
            ColumnB,
            ColumnC,

            (
                select
                (
                    (
                        select      RTRIM(Address1Line1),
                                    RTRIM(Address1Line2),
                                    RTRIM(Address1Line3),
                                    RTRIM(Address1Line4),
                                    RTRIM(Address1Line5) 
                        for xml path('Address'), type
                    ),
                    (
                        select      RTRIM(Address2Line1),
                                    RTRIM(Address2Line2),
                                    RTRIM(Address2Line3),
                                    RTRIM(Address2Line4),
                                    RTRIM(Address2Line5)
                        for xml path('Address'), type
                    )
                ) FOR XML PATH(''), root('Addresses'),type
            ) AS Addresses

FROM        TableA
4

2 回答 2

0

只需将文字替换为表中列的名称:

select
(SELECT '1' addressline1,'2' addressline2, '3' addressline3, '4' addressline4, 'PC' postcode for xml path('Address1'), type ),
(SELECT '21' addressline1,'22' addressline2, '23' addressline3, '24' addressline4, '2PC' postcode for xml path('Address2'), type  )
FOR XML PATH(''), root('PatientAddress'),type
于 2014-01-21T16:07:36.153 回答
0
DECLARE @Addresses TABLE 
(AddressNumber INT, Addressline1 VARCHAR(50),Addressline2 VARCHAR(50)
,Addressline3 VARCHAR(50),Addressline4 VARCHAR(50),PostCode VARCHAR(50))

INSERT INTO @Addresses VALUES 
(1,'Add 1 Addressline1', 'Add 1 Addressline2', 'Add 1 Addressline3', 'Add 1 Addressline4', 'ABCD132'),
(2,'Add 2 Addressline1', 'Add 2 Addressline2', 'Add 2 Addressline3', 'Add 2 Addressline4', 'JKLM132'),
(3,'Add 3 Addressline1', 'Add 3 Addressline2', 'Add 3 Addressline3', 'Add 3 Addressline4', 'RTPZ132'),
(4,'Add 4 Addressline1', 'Add 4 Addressline2', 'Add 4 Addressline3', 'Add 4 Addressline4', 'XMLO132')


select   AddressNumber [@AddressID]
        ,Addressline1
        ,Addressline2
        ,Addressline3
        ,Addressline4
        ,PostCode
FROM    @Addresses 
for xml PATH('Address'),Elements , root('PatientAddress') 

结果集

<PatientAddress>
  <Address AddressID="1">
    <Addressline1>Add 1 Addressline1</Addressline1>
    <Addressline2>Add 1 Addressline2</Addressline2>
    <Addressline3>Add 1 Addressline3</Addressline3>
    <Addressline4>Add 1 Addressline4</Addressline4>
    <PostCode>ABCD132</PostCode>
  </Address>
  <Address AddressID="2">
    <Addressline1>Add 2 Addressline1</Addressline1>
    <Addressline2>Add 2 Addressline2</Addressline2>
    <Addressline3>Add 2 Addressline3</Addressline3>
    <Addressline4>Add 2 Addressline4</Addressline4>
    <PostCode>JKLM132</PostCode>
  </Address>
  <Address AddressID="3">
    <Addressline1>Add 3 Addressline1</Addressline1>
    <Addressline2>Add 3 Addressline2</Addressline2>
    <Addressline3>Add 3 Addressline3</Addressline3>
    <Addressline4>Add 3 Addressline4</Addressline4>
    <PostCode>RTPZ132</PostCode>
  </Address>
  <Address AddressID="4">
    <Addressline1>Add 4 Addressline1</Addressline1>
    <Addressline2>Add 4 Addressline2</Addressline2>
    <Addressline3>Add 4 Addressline3</Addressline3>
    <Addressline4>Add 4 Addressline4</Addressline4>
    <PostCode>XMLO132</PostCode>
  </Address>
</PatientAddress>
于 2014-01-21T15:50:40.933 回答