0

所以我有下面的内容,可以让我从表中的一条记录中获取 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。我希望能够在不指定每个条目的情况下运行所有​​“产品”。

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 回答