2011-12-23 1 views
0

У меня есть таблица вроде этого:Генерация XML из таблицы

ID Name Column1 Column2 Column3 

1  ABC  202.2  1500  34000 
2  IJK  104  10000  27000 

Я хочу, чтобы генерировать XML, как это:

<doc> 
    <record ID="1" Name="ABC" Column1="202.2" Column2="15000" Column3="34000" /> 
    <record ID="2" Name="IJK" Column1="104" Column2="10000" Column3="27000" /> 
</doc> 

Я получил некоторые подсказки от this forum post и используется этот код:

CREATE TABLE #tmp (column1 VARCHAR(20), column2 VARCHAR(20), column3 VARCHAR(20)) 

INSERT INTO #tmp VALUES ('data1', 'data2', 'data3') 
INSERT INTO #tmp VALUES ('data11', 'data21', 'data31') 

-- FOR XML PATH with ELEMENTS will automatically unpivot the data for you 
-- Then reshape your XML using nested FLWOR loops 
SELECT 
    (
    SELECT * 
    FROM #tmp t 
    FOR XML PATH, ELEMENTS, TYPE 
    ).query(' 
for $e in row 
return 
<row>{ 
    for $f in $e/* 
    return <field name="{local-name($f)}">{data($f)}</field> 
    } 
</row> 
') 

Я пробовал следующую измененную версию:

SELECT (SELECT * FROM cte_temp t FOR XML PATH, ELEMENTS, TYPE) 
.query('for $e in row return 
<doc> 
{ 
     for $f in $e return <record {local-name($f)}="{data($f)}" /> 
} 
</doc>') 

Но я получаю сообщение об ошибке:

XQuery [query()]: Invalid source character 0x7b found in an identifier 
        near 'return'. 

ответ

1

Почему вы пытаетесь получить фантазии.

Select * from #tmp as record 
FOR XML AUTO, root('doc') 
+0

Я немного тупой с функциональностью XML T-SQL. Но это безумно легко! благодаря!! – TheVillageIdiot