Sql 如何使用Modify更新XML

Sql 如何使用Modify更新XML,sql,sql-server,xml,xquery-sql,Sql,Sql Server,Xml,Xquery Sql,我使用的是SQL Server,表中有XML列。我的插入过程具有输入参数XML文档。有没有办法更新表中已经存在的XML 这是我表格中的旧XML: <weather Location="Paris, France"> <forecast> <description>Sky is clear</description> <Date>2013-09-19</Date> <MinTemp&

我使用的是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>

天晴
2013-09-19
13
20
78
1024
3.
天晴
2013-09-20
14
21
75
1020
1.
.... 是这个预测的10倍
这是我的新的:

 <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>

天晴
2013-09-19
14
21
70
1000
5.
天晴
2013-09-20
17
24
68
1024
3.
.... 是这个预测的10倍
我现在想要的是用从新XML读取的值更新我的旧XML。我知道我必须以某种方式使用我的旧XML,我想我可以用…while(exist)和modify来完成,但是如何从我的新XML中读取我需要的值,如何读取9月19日的数据,并用旧XML更新9月19日的数据,然后读取9月20日的数据,然后用旧XML更新9月20日的数据等等

感谢您的帮助……

您可以这样尝试:-

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
你可以这样试试:-

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替换列中的整个XML?很难理解你想如何更新XML。也许您可以在问题中包括参数的外观、表中已有的XML的外观以及更新后希望XML在表中的外观。预测应该更新还是只添加?有时应该删除它们吗?应该更新位置还是使用位置来查找应该添加预测的位置?这两个XML文件具有完全相同的结构,我希望从新文件中读取所有值,并替换表中XML文件中的旧值。我要替换的值是最小和最大温度、压力、湿度和风速。根据我找到的XML的属性位置,只有一个具有这个位置和相同的第一个日期,所以这不是问题。所以,我有旧的XML,也有新的XML,我需要使用修改替换值。很高兴我能提供帮助:)。你看了吗?你想只更新几个属性吗?还是想用从该文件读取的新XML替换列中的整个XML?很难理解你想如何更新XML。也许您可以在问题中包括参数的外观、表中已有的XML的外观以及更新后希望XML在表中的外观。预测应该更新还是只添加?有时应该删除它们吗?应该更新位置还是使用位置来查找应该添加预测的位置?这两个XML文件具有完全相同的结构,我希望从新文件中读取所有值,并替换表中XML文件中的旧值。我要替换的值是最小和最大温度、压力、湿度和风速。根据我找到的XML的属性位置,只有一个具有这个位置和相同的第一个日期,所以这不是问题。所以,我有旧的XML和新的XML,我需要使用修改替换值。很高兴我能提供帮助:)。我必须从我的新XML文件中读取新值,所以我不太确定这是我需要的。我知道我必须使用修改,并且一直在尝试这样做,但我无法正确编写此查询。这就像是一个必须迭代我的新文件和旧文件才能更新它,但我不想这样做。@user2710923:-我真的很抱歉,但我没有明白你的意思。我的回答对你有帮助吗?还是白费了(:)我甚至不能尝试,因为这不是我真正想要的。无论如何,谢谢你的回答。我必须从我的新XML文件中读取新值,所以我不太确定这是我需要的。我知道我必须使用modify,并且一直在尝试这样做,但我无法正确编写此查询。这就像是一个必须迭代我的新文件和旧文件才能更新它,但我不想这样做。@user2710923:-我真的很抱歉,但我没有明白你的意思。我的回答对你有帮助吗?还是白费了(:)我甚至不能尝试,因为这不是我真正想要的。谢谢你的回答。