2

次の形式でxmlを生成しようとしています:

<Root>
    <Domain>Abc</Domain>
    <Name>Xyz</Name>
    <Contents>
        <Content>
            <ID>1</ID>
            <Value>Test 1</Value>
            <Record ID="1">Test 1</Record>
        </Content>
        <Content>
            <ID>2</ID>
            <Value>Test 2</Value>
            <Record ID="2">Test 2</Record>
        </Content>
    </Contents>
</Root>

私の質問は次のとおりです。

declare @TestTable table (ID int, Value varchar(100))

insert into @TestTable values (1,'Test 1')
insert into @TestTable values (2,'Test 2')

declare @Domain varchar(max)='Abc'
declare @Name varchar(max)='Xyz'

SELECT
1 AS Tag,
NULL AS Parent,
@Domain as 'Root!1!Domain!Element',
@Name as 'Root!1!Name!Element',
NULL as 'Contents!2!Element',
NULL as 'Content!3!ID!Element',
NULL as 'Content!3!Value!Element',
NULL as 'Content!3!Record!Element'

union

SELECT
2 AS Tag,
1 AS Parent,
NULL,NULL,NULL,NULL,NULL,NULL

union

select
3 as Tag,
2 as Parent,
NUll,NUll,NULL,
ID,Value,Value
from @TestTable

FOR XML EXPLICIT

私のクエリはレコードタグを完全に生成しませんが、現在は生成されます

<Record>Test 2</Record>

これは次のようになります

<Record ID=2>Test 2</Record>

私はすべての可能性を試しましたが、タグを取得できませんでした。誰かが私がこの問題を解決するのを手伝ってくれますか?

4

2 に答える 2

0

FOR XML EXPLICITを使用する場合は、ORDERBYを忘れないでください。


SELECT
    1 AS Tag,
    NULL AS Parent,
    @Domain as 'Root!1!Domain!Element',
    @Name as 'Root!1!Name!Element',
    NULL as 'Contents!2!Element',
    NULL as 'Content!3!ID!Element',
    NULL as 'Content!3!Value!Element',
    NULL as 'Record!4!ID',
    NULL as 'Record!4!'

union

SELECT
    2 AS Tag,
    1 AS Parent,
    @Domain,NULL,NULL,NULL,NULL,NULL, null

union

select
    3 as Tag,
    2 as Parent,
    @Domain,NUll,NULL,
    ID,Value,null,null

    from @TestTable
union

select
    4 as Tag,
    3 as Parent,
    @Domain,NUll,NULL,
    ID,Value,ID,Value

    from @TestTable
ORDER BY    'Root!1!Domain!Element','Contents!2!Element','Content!3!ID!Element','Record!4!ID'

FOR XML EXPLICIT
于 2012-10-10T16:59:50.800 に答える
0

明示的にxmlから期待される出力を取得できませんでした。代わりに、xmlパスを使用して出力を取得しました。これは私の更新されたクエリです

SELECT 
       @Domain "Domain",
       @Name "Name",
(
SELECT 
       ID  "ID",
       Value   "Value",
       (select 
        ID "@ID",
        Value  as "text()"      
        FOR XML PATH('Record'), ELEMENTS, TYPE )       
FROM   @TestTable
FOR XML PATH ('Content'), TYPE, ROOT('Contents')
)
FOR XML PATH ('Root')

明示的なxmlを使用する修正を投稿することを歓迎します。

于 2012-09-27T09:46:19.767 に答える