所以我有以下内容,允许我从Products
表中的一条记录中获取xml。
但是,我需要能够从Products
表中的所有记录及其ProductId
中获取XML。
我对如何开始这个感到困惑。
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
来获得上述内容。我希望能够在不指定每个条目的情况下运行所有“产品”。
答案 0 :(得分: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。
答案 1 :(得分: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