【问题标题】:XML value update in SQL SERVERSQL SERVER 中的 XML 值更新
【发布时间】:2013-10-15 11:29:57
【问题描述】:

有人可以帮忙解决一下这个表吗,我想将页面大小值从 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>

【问题讨论】:

    标签: sql sql-server xml sql-server-2008-r2 sqlxml


    【解决方案1】:

    如果 @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

    【讨论】:

      【解决方案2】:

      值得注意的是,如果您只想将 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 的解决方案更安全。不过,这应该会更快,所以如果时间很紧迫的话......

      【讨论】:

      • 这个查询给了我这个错误“操作数类型冲突:xml 与 ntext 不兼容”
      • 这是在您将 xml 存储在 ntext 列而不是 xml 之前。这通常是一个可怕的想法,但如果你坚持下去,你可以将我的代码的第二行从 ...) as xml) 更改为 ...) as ntext)
      • 我的意思是“因为”,而不是“之前”
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-14
      • 2012-05-10
      • 2017-01-03
      • 2013-05-07
      • 2014-03-23
      • 2018-08-31
      相关资源
      最近更新 更多