1

我想知道是否有人可以向我指出一个教程或给我关于处理 XML“请求报价”文档的建议。使用 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 列并对其进行交易,而不是将单个行项目切碎并将其存储在关系表中?

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

4

1 回答 1

1

我想知道是否有人可以向我指出一个教程或给我关于处理 XML“请求报价”文档的建议。使用 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 和节点 ID

还需要能够添加/编辑/删除任何一个

只需使用modify() 方法(xml 数据类型)

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 列并对其进行交易,而不是将单个行项目切碎并将其存储在关系表中?

不知道什么最适合您,但我肯定会将数据切碎到表格中,除非有一些真正令人信服的理由不这样做。

于 2011-07-20T21:39:45.423 回答