2011-01-07 58 views
3

我有以下表结构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。

任何帮助非常感谢。

回答

2

设法得到它的工作,从我以前的测试中,我在错误的地方逗号和括号认为。

解决方案我到达如下:

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

这里有一个肮脏的黑客,但它会工作:

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

设法得到它的工作,但我喜欢这个黑客太:) – Fishcake 2011-01-07 16:07:11