2012-08-23 2 views
1

나는 다음과 같은 SELECT 쿼리했습니다 :TSQL 한 번만

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의 시작 부분에 한 번만 추가하십시오. 내가 어떻게 이걸 얻을 수 있니?

답변

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 
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 
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')