преобразование из XML-документа в реляционную модель с T-SQL - PullRequest
0 голосов
/ 16 марта 2012

Мне нужно вставить в таблицу данные из XML-документов (в реляционной модели), которые у меня есть в другой таблице.Я использую SQL Server 2005.

пример структуры xml:

<order id=”123”>
<products>
    <product prodId=”2120”>
        <name>Product1</name>
        <quantity>2</quantity>
    </product>
    <product prodId=”1200”>
        <name>Product2</name>
        <quantity>4</quantity>
    </product>
    <product prodId=”945”>
        <name>Product3</name>
        <quantity>1</quantity>
    </product>
</products>
</order>

... и таблица результатов:

OrderID  ProductID  Name      Quantity
123      2120       Product1  2
123      1200       Product2  4
123      945        Product3  1

Я решаю эту проблему синструмент openxml, но он немного медленный.Как я могу сделать это в XQuery?Какой метод лучше всего подходит для решения подобных задач?

1 Ответ

0 голосов
/ 07 мая 2013
DECLARE @xml_str XML =  
   '<order id="123"> <products>
    <product prodId="2120">
        <name>Product1</name>
        <quantity>2</quantity>
    </product>
    <product prodId="1200">
        <name>Product2</name>
        <quantity>4</quantity>
    </product>
    <product prodId="945">
        <name>Product3</name>
        <quantity>1</quantity>
    </product> </products> </order>'

SELECT  
    c.value('(../../@id)', 'int') AS OrderID, 
    c.value('(@prodId)[1]', 'int') AS ProductID,
    c.value('(./name)[1]', 'varchar(20)') AS Name,
    c.value('(./quantity)[1]', 'int') AS Quantity
FROM @xml_str.nodes ('(/order/products/product)') AS t(c)
GO

OrderID     ProductID   Name                 Quantity
----------- ----------- -------------------- -----------
123         2120        Product1             2
123         1200        Product2             4
123         945         Product3             1

(3 row(s) affected)
...