0

したがって、テーブル内の1つのレコードからxmlを取得できるようにする以下がありProductsます。

Productsただし、テーブル内のすべてのレコードから XML を取得できるようにする必要がありますProductId

私はこれを開始する方法について混乱しています。

DECLARE @MyXML XML
SET @MyXML =
    (SELECT ProductsXML
     FROM Products
     WHERE ProductId= 1)
SELECT 
    a.b.value('@upccode','int') as UPC,
    a.b.value('@dateadded','date') as DateAdded
FROM
    @MyXML.nodes('xml/Product/UPC')a(b);

SQL Server 2008 を使用しています。

テストデータ:

ProductId: 1
ProductsXML:
<xml>
        <Product>
            <UPC upccode="1237" dateadded="10/9/2012"/>
            <UPC upccode="1236" dateadded="10/8/2012"/>
            <UPC upccode="1235" dateadded="10/7/2012"/>
            <UPC upccode="1234" dateadded="10/6/2012"/>
        </Product>
    </xml>

ProductId: 2
ProductsXML:
<xml>
        <Product>
            <UPC upccode="9876" dateadded="9/9/2012"/>
            <UPC upccode="9877" dateadded="9/8/2012"/>
            <UPC upccode="0998" dateadded="9/7/2012"/>
            <UPC upccode="7877" dateadded="9/6/2012"/>
        </Product>
    </xml>

私が探している結果は次のようなものです:

ProductId      UPC        DateAdded
---------      ---        ---------
1              1237       10/9/2012
1              1236       10/8/2012
....
2              9876       9/9/2012
2              9877       9/8/2012

現在、上記を取得できますが、一度PoductIdに 1 つずつ指定する必要があります。各エントリを指定せずにすべての「製品」を実行できるようにしたいと考えています。

4

2 に答える 2

1

このようなものを探していると思います。

SELECT ProductId,
    a.b.value('@upccode','int') as UPC,
    a.b.value('@dateadded','date') as DateAdded
FROM Products
  CROSS APPLY ProductsXML.nodes('xml/Product/UPC')a(b);

そこに XML 変数を含める必要はありません。Productsテーブルを直接クエリし、CROSS APPLYに対してProductsXMLフィールドを使用して XML を細断処理します。

于 2012-10-09T20:31:51.960 に答える
0
hi u can try using Linq to xml to create an entity from the xml, see the sample code below


XDocument somedoc = XDocument.Load("your xml path");


var somelist = from somevariable in somedoc.Descendants("Product")
               select new Product {
                                    UPC = somevariable.Attribute("upccode").value
                                    DateAdded = somevariable.Attribute("dateadded").value
                                  }

so now somelist is  a collection thru which u can iterate and add to List<Product>, create product b4 u start tryinh this
于 2012-10-10T02:42:12.523 に答える