0

有人可以帮忙看看这张表吗,我想把页面大小值从 25 更改为 5000?

Select input_xml 
From create_report 
Where report_name='test report';

上面查询这个数据

input_xml
<inputdata module="Vidoes">
   <schedule enabled="true">
   <recurrance>
   <time run="21:27"/>
   <pattern type="Daily">
   <detail>9</detail>
   </pattern>
   <daterange start="13/05/2013 00:00:00" end="Never"/>
   </recurrance>
   <disk="true" toemails="true" custompathandname="" format="PDF"/>
   </schedule>
   <params>
   <param name="summary_detail">Enhanced</param>
   <param name="reportType">VideoXML</param>
   <param name="reportLabel">Todays Videos</param>
   <param name="pageSize">25</param>
   </params>
   </inputdata>
4

2 回答 2

3

如果@data是你的 xml 变量:

set @data.modify('
      replace value of (inputdata/params/param[@name="pageSize"]/text())[1]
      with 5000
')

如果要更新表:

update create_report set
input_xml.modify('
      replace value of (inputdata/params/param[@name="pageSize"]/text())[1]
      with 5000
')
where report_name='test report'

sql fiddle demo

于 2013-10-15T11:35:49.990 回答
0

值得注意的是,如果您只想将 pageSize 替换为 25 到 5000 并且您很确定这不会破坏任何内容,则将 XML 转换为 nvarchar(max),而不是使用替换函数并将 nvarchar(max) 转换为 XML可以导致更快的查询。

update create_report
set input_xml = cast(replace(cast(input_xml as nvarchar(max)), '<param name="pageSize">25</param>', '<param name="pageSize">5000</param>') as xml)
where report_name = 'test report'

请记住,它更适合一次性更改,而不是使其经常使用的任务或存储过程,因为更改 XML 文件的结构,它很容易破坏某些东西,因此 Roman Pekar 的解决方案更安全。不过,这应该会更快,所以如果时间至关重要……

于 2013-10-15T11:48:59.010 回答