2017-07-11 23 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)在等于运算符中不兼容“。你为什么使用旧的'文本'数据类型? –