2013-10-15 48 views
0

有人可以幫助使用此表,請將頁面大小值從25更改爲5000?SQL SERVER中的XML值更新

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> 

回答

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

0

這是值得大家注意的是,如果你只是想用25至5000,以取代pageSize的,你可以肯定,不會打破任何東西,鑄造XML來爲nvarchar(最大),比使用替換功能和比將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文件的結構,它可以很容易碰壞,所以羅馬PEKAR的解決方案是安全的。但是,這應該仍然更快,所以如果時間是關鍵......

+0

這個查詢給了我這個錯誤「操作數類型衝突:xml與ntext不兼容」 –

+0

這是在你將xml存儲在'ntext'列之前然後'xml'。這通常是可怕的想法,但如果你堅持使用它,你可以將我的代碼的第二行從'...)更改爲xml)''作爲ntext)''。 – nimdil

+0

我的意思是「因爲」,而不是「之前」 – nimdil