1

私は次のSELECTクエリを持っています:

SELECT
'2012' 'period',
Person.Name 'users/person'
FROM Person
FOR XML PATH(''), ROOT ('company')

これにより、次のXMLが得られます。

<company>
  <period>2012</period>
  <users>
    <person>Dubach</person>
  </users>
  <period>2012</period>
  <users>
    <person>Pletscher</person>
  </users>
  <period>2012</period>
  ....

結果のXMLの先頭に「ピリオド」タグを1回だけ付けたいと思います。どうすればこれを達成できますか?

4

3 に答える 3

3
DECLARE @period XML = '<period>2012</period>'
DECLARE @xml XML = (
        SELECT 
        Person.Name 'users/person'
        FROM Person
        FOR XML PATH(''), ROOT ('company')
    )

SET @xml.modify('insert sql:variable("@period") as first into (/company)[1]')

SELECT @xml
于 2012-08-23T07:50:09.670 に答える
1

要素の作成を副選択内にネストしてから、そのusers/person周囲に外側の XML を作成できます。

declare @Person table (Name varchar(10))
insert into @Person values ('Bob'),('Harry')

SELECT
'2012' 'period',
(SELECT p.Name 'users/person'
FROM @Person p
FOR XML PATH(''), TYPE
)
FOR XML PATH(''), ROOT ('company')
于 2012-08-23T08:04:07.337 に答える
0

明示モードを使用して、好きなように整形できます。

CREATE TABLE #person (
    name VARCHAR(10)
)

INSERT #person VALUES ('One')
INSERT #person VALUES ('Two')
INSERT #person VALUES ('Three')
INSERT #person VALUES ('Four')
INSERT #person VALUES ('Five')

SELECT
    1 AS Tag,
    NULL AS Parent,
    '2012' AS [company!1!period!ELEMENT],
    NULL AS [users!2!person!ELEMENT]
FROM
    (SELECT 1 AS fake) AS data
UNION ALL
SELECT
    2 AS Tag,
    1 AS Parent,
    '2012',
    P.name
FROM
    #person P
FOR XML EXPLICIT
于 2012-08-23T07:54:41.683 に答える