2011-01-07 60 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