我想知道是否有人可以指点我的教程或给我处理XML“Request For Quote”文档的建议。使用SQL Server 2005.例如:
<MyQuote>
<Header>
<Customer>XYZ</Customer>
<Material>Wood&</Material>
<Header>
<LineItems>
<Line>
<Quantity>32</Quantity>
<Model>Chair 350</Model>
<Color>Red</Color>
</Line>
.
</LineItems>
</MyQuote>
用XQuery弄湿我的脚。我需要将此文档分解为单独的行项目,使用数字标识每个行项目,验证它们计算价格。还需要能够添加/编辑/删除任何一个。我可以看到如何将行放入表中,但不知道如何使用序号对它们进行标识并对它们应用存储过程。我需要随机处理任何请求,例如validate line 6
,calc price for line 3
delete line 4
,change line 2 to Yellow
等。
我假设最好的方法是将整个文档存储为XML列并对其进行交易,而不是在关系表中粉碎和存储单个行项目?
任何建议,代码,网址等都将不胜感激。
答案 0 :(得分:1)
我想知道是否有人可以指点我教程或给我 关于处理XML“Request for Quote”文档的建议。运用 SQL Server 2005
以下是一些有用的页面:
我需要将此文档粉碎成单独的行项目
这将为您提供所有行:
select
T.N.value('Quantity[1]', 'int') as Quantity,
T.N.value('Model[1]', 'varchar(25)') as Model,
T.N.value('Color[1]', 'varchar(25)') as Color
from @XML.nodes('/MyQuote/LineItems/Line') as T(N)
每个人都有一个数字
不那么容易。看看这个答案。 XQuery and Node Ids
还需要能够添加/编辑/删除任何一个
只需使用modify() Method (xml Data Type)
即可I need to randomly be able to process any request such as validate line 6, calc price for line 3 delete line 4, change line 2 to Yellow
要获得第6行,你应该这样做:
select
T.N.value('Quantity[1]', 'int') as Quantity,
T.N.value('Model[1]', 'varchar(25)') as Model,
T.N.value('Color[1]', 'varchar(25)') as Color
from @XML.nodes('/MyQuote/LineItems/Line[6]') as T(N)
/MyQuote/LineItems/Line[6]
与/MyQuote/LineItems/Line[position()=6]
我假设最好的方法是将整个文档存储为XML 列和交易,而不是粉碎和存储 关系表中的各个订单项?
不知道什么对你最好,但我肯定会把数据粉碎到表格,除非有一些非常有说服力的理由不这样做。