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

@dataxml 変数の場合:

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) にキャストしても問題がないと確信している場合は、replace 関数を使用して 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ファイルの構造を変更すると、何かを簡単に壊す可能性があるため、定期的に使用されるタスクまたはストアドプロシージャにするよりも、1回限りの変更に適していることに注意してください。したがって、Roman Pekarのソリューションがより安全です. ただし、これはまだ速いはずなので、時間が重要な場合は...

于 2013-10-15T11:48:59.010 に答える