SQL Server的T-SQL获取数据转换成XML使用FOR XML PATH
问题描述:
我有以下表结构SQL Server的T-SQL获取数据转换成XML使用FOR XML PATH
ZoneID int
ZoneName varchar(50)
我需要进入一个XML结构此如下导入到另一个系统
<Batch>
<Record>
<Insert>
<Field>
<FieldName>ZoneID</FieldName>
<FieldValue>1</FieldValue>
</Field>
<Field>
<FieldName>ZoneName</FieldName>
<FieldValue>Interior</FieldValue>
</Field>
</Insert>
</Record>
<Record>
<Insert>
<Field>
<FieldName>ZoneID</FieldName>
<FieldValue>2</FieldValue>
</Field>
<Field>
<FieldName>ZoneName</FieldName>
<FieldValue>Exterior</FieldValue>
</Field>
</Insert>
</Record>
</Batch>
到目前为止,我有这样的:
SELECT
(
(SELECT
'ZoneID' as 'FieldName',
[ZoneID] as 'FieldValue'
FROM [dbo].[Condition_t_Zones]
WHERE ZoneID = [Condition_t_Zones].ZoneID
FOR XML PATH('field'), TYPE)
) as 'Insert'
FROM [Condition_t_Zones]
FOR XML PATH('record'), ROOT('batch')
但我无法工作,如何选择使用另一个苏另一场“ZONENAME” bquery。
任何帮助非常感谢。
答
设法得到它的工作,从我以前的测试中,我在错误的地方逗号和括号认为。
解决方案我到达如下:
SELECT
(
(SELECT
'ZoneID' as 'FieldName',
ZoneID as 'FieldValue'
FROM [dbo].[Condition_t_Zones]
WHERE ZoneID = [Condition_t_Zones].ZoneID
FOR XML PATH('field'), TYPE)
) as 'insert',
(
(SELECT
'ZoneName' as 'FieldName',
ZoneName as 'FieldValue'
FROM [dbo].[Condition_t_Zones]
WHERE ZoneID = [Condition_t_Zones].ZoneID
FOR XML PATH('field'), TYPE)
)
as 'insert'
FROM [Condition_t_Zones]
FOR XML PATH('record'), ROOT('batch')
答
这里有一个肮脏的黑客,但它会工作:
DECLARE @t TABLE
(
ZoneID INT
, ZoneName VARCHAR(50)
)
INSERT INTO @t
(ZoneID, ZoneName)
VALUES (1, 'Interior'),
(2, 'Exterior')
SELECT CONVERT(XML, REPLACE((SELECT 'ZoneID' AS 'Field/FieldName'
, [ZoneID] AS 'Field/FieldValue'
, 'ZoneName' AS 'Field2/FieldName'
, [ZoneName] AS 'Field2/FieldValue'
FROM @t t2
WHERE ZoneID = t.ZoneID
FOR
XML PATH('')
), 'Field2', 'Field')) AS 'Insert'
FROM @t t
FOR XML PATH('record')
, ROOT('batch')
设法得到它的工作,但我喜欢这个黑客太:) – Fishcake 2011-01-07 16:07:11