2017-07-11 71 views
0

我有一個查詢在那裏我使用XML.modify在SQL中插入一個新節點到我的XML文檔保存XML節點回

但是我打印此XML,我看到我的XML文檔更新,但沒有在節約我的數據庫

是否需要更新腳本才能使更改生效? (在數據庫中的列的類型文本,但我將它轉換成XML

+0

是,您需要UPDATE或INSERT是'XML.modify'只是讓一些計算上的XML值相同的方式,例如算術運算符'+'呢但爲了將新計算的值存儲在表中,您必須明確指示DBMS執行此操作。 – Serg

回答

1

您可以修改列的地方是這樣的:

create table #t(id int, doc xml) 
insert into #t(id,doc) values (1,'<a><b/></a>') 

update #t set doc.modify('delete /a/b') where id = 1 

select doc from #t 

但是,如果你有文檔複製到一個變量,你「馬上有一個像這樣來更新它。

create table #t(id int, doc xml) 
insert into #t(id,doc) values (1,'<a><b/></a>') 

declare @doc xml = (select doc from #t where id =1) 

set @doc.modify('delete /a/b')  

update #t set doc = @doc where id = 1 

select doc from #t 
+0

我是tr ying用更新語句重新插入我的列,但它給了我這個錯誤消息402,級別16,狀態1,行33 數據類型text和varchar(max)在等於運算符中不兼容。使用該命令 – abarz12

+0

- >更新[DBO] [tbl_reports] \t \t \t \t \t \t組信息=鑄造(@xml爲varchar(最大值))\t \t \t \t \t \t \t其中信息=鑄造(@oldXML as varchar(max)) – abarz12

+0

這可能是因爲列信息的類型爲'text',並且'數據類型text和varchar(max)在等於運算符中不兼容「。你爲什麼使用舊的'文本'數據類型? –