sql xml订单处理器

时间:2011-07-19 15:10:56

标签: sql-server sql-server-2005 xquery-sql

我想知道是否有人可以指点我的教程或给我处理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 6calc price for line 3 delete line 4change line 2 to Yellow等。

我假设最好的方法是将整个文档存储为XML列并对其进行交易,而不是在关系表中粉碎和存储单个行项目?

任何建议,代码,网址等都将不胜感激。

1 个答案:

答案 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   列和交易,而不是粉碎和存储   关系表中的各个订单项?

不知道什么对你最好,但我肯定会把数据粉碎到表格,除非有一些非常有说服力的理由不这样做。