【问题标题】:sql xml order processorsql xml 订单处理器
【发布时间】:2011-07-19 15:10:55
【问题描述】:

我想知道是否有人可以为我提供有关处理 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 6calc price for line 3delete line 4change line 2 to Yellow等。

我假设最好的方法是将整个文档存储为 XML 列并对其进行事务处理,而不是将单个行项目分解并存储在关系表中?

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

【问题讨论】:

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


    【解决方案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 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 列并对其进行交易,而不是粉碎和存储 关系表中的单个订单项?

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-03
      • 2012-09-25
      • 2019-09-03
      • 1970-01-01
      相关资源
      最近更新 更多