2011-01-07 6 views
3

FOR使用してXMLにデータを取得し、私は次の表の構造SQL ServerのT-SQLをXML PATH

ZoneID int 
ZoneName varchar(50) 

を持って、私は別のシステム

<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> 
にインポートするために、次のようにXML構造にこれを取得する必要があります

これまでのところ、私はこれがあります。

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を」別のsuを使用して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