TSQL for xml标记只需一次
我有以下选择查询:TSQL for xml标记只需一次,xml,tsql,Xml,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> &
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的开头只使用一次句号标记。如何实现这一点?您可以使用显式模式以任意方式塑造它:
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
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
您可以使用显式模式以任意方式对其进行造型:
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
您可以在子选择中嵌套用户/个人元素的创建,然后在其周围创建外部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')
您可以在子选择中嵌套用户/个人元素的创建,然后在其周围创建外部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')