【问题标题】:How to UPDATE XML using Modify [duplicate]如何使用 Modify [重复] 更新 XML
【发布时间】:2013-09-25 01:51:55
【问题描述】:

我正在使用 SQL Server 并拥有带有 XML 列的表。我的插入程序具有输入参数 XML 文档。有什么办法可以更新表中已经存在的 XML?

这是我表中的旧 XML:

 <weather Location="Paris, France">
   <forecast>
     <description>Sky is clear</description>
     <Date>2013-09-19</Date>
     <MinTemp>13</MinTemp>
     <MaxTemp>20</MaxTemp>
     <Humidity>78</Humidity>
     <Pressure>1024</Pressure>
     <Windspeed>3</WindSpeed>
   </forecast>  
   <forecast>
     <description>Sky is clear</description>
     <Date>2013-09-20</Date>
     <MinTemp>14</MinTemp>
     <MaxTemp>21</MaxTemp>
     <Humidity>75</Humidity>
     <Pressure>1020</Pressure>
     <Windspeed>1</WindSpeed>
   </forecast>  .... 10 times this forecast
 </weather>

这是我的新的:

 <weather Location="Paris, France">
   <forecast>
     <description>Sky is clear</description>
     <Date>2013-09-19</Date>
     <MinTemp>14</MinTemp>
     <MaxTemp>21</MaxTemp>
     <Humidity>70</Humidity>
     <Pressure>1000</Pressure>
     <Windspeed>5</WindSpeed>
   </forecast>  
   <forecast>
     <description>Sky is clear</description>
     <Date>2013-09-20</Date>
     <MinTemp>17</MinTemp>
     <MaxTemp>24</MaxTemp>
     <Humidity>68</Humidity>
     <Pressure>1024</Pressure>
     <Windspeed>3</WindSpeed>
   </forecast>  .... 10 times this forecast
 </weather>

我现在想要的是用我从新 XML 读取的值更新我的旧 XML。我知道我必须以某种方式通过我的旧 XML,我想我可以用 ...while(exist) 和修改来做到这一点,但是如何从我的新 XML 中读取我需要的值,如何读取假设是 9 月 19 日的数据,并在旧 XML 中更新 9 月 19 日,然后读取 9 月 20 日的数据,然后在旧 XML 等中更新 9 月 20 日等...?

感谢您的帮助...

【问题讨论】:

  • 你看过modify()吗?
  • 您想只更新几个单一属性 - 还是想用从该文件读取的新 XML 替换列中的整个 XML?
  • 很难理解您希望如何更新 XML。也许您可以在您的问题中包含参数是什么样的,表中已经存在的 XML 是什么样的,以及您希望 XML 在更新后在表中是什么样的。预测应该更新还是只添加?有时应该删除它们吗?是否应该更新位置,或者可能使用它来查找应该添加预测的位置?
  • 这两个 XML 文件具有完全相同的结构,我想从新文件中读取所有值并替换表中 XML 文件中的旧值。我要替换的值是最小和最大温度、压力、湿度和风速。基于属性 Location 我找到了我需要的 XML,只能有一个具有此 Location 和相同的第一个日期,所以这不是问题。所以,我有旧的 XML 和新的,我需要使用修改替换值。
  • 很高兴我能提供帮助:)。

标签: sql sql-server xml xquery-sql


【解决方案1】:

你可以这样试试:-

update tbl1
set myXml.modify('replace value of (/weather/forecast/..)[1] 
                    with concat(string(sql:column("columnname")), "value")')
where myXml.exist('/weather/forecast/..') = 1 //some condition

【讨论】:

  • 我必须从我的新 XML 文件中读取新值,所以我不太确定这是我需要的。我知道我必须使用 modify 并且一直在尝试这样做,但我无法正确编写此查询。这就像必须遍历我的新文件和旧文件才能更新它,但不想那样做。
  • @user2710923:- 真的很抱歉,但我没明白你的意思。我的回答对你有帮助还是徒劳??? :(
  • :) 我什至无法尝试,因为这不是我真正想要的。无论如何感谢您的回答。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-05-12
  • 1970-01-01
  • 2020-01-31
  • 1970-01-01
  • 2015-11-06
  • 1970-01-01
  • 2011-11-15
相关资源
最近更新 更多