【问题标题】:Saving XML node back in my table将 XML 节点保存回我的表中
【发布时间】:2017-07-11 13:50:43
【问题描述】:

我有一个查询,我在 sql 中使用 XML.modify 将新节点插入到我的 xml 文档中

但是我打印了这个 XML,我看到我的 XML 文档更新了,但我的数据库中没有保存任何内容

我是否需要在此处更新脚本才能使更改生效? (数据库中的列是文本类型,但我将其转换为 XML

【问题讨论】:

  • 是的,您可能需要 UPDATE 或 INSERT。 XML.modify 只是对 XML 值进行一些计算,就像算术运算符 + 一样。但是要将新计算的值存储在表中,您必须明确指示 DBMS 这样做。

标签: sql sql-server xml sqlxml


【解决方案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

【讨论】:

  • 我正在尝试使用更新语句重新插入我的列,但它给了我这个错误消息 402,级别 16,状态 1,第 33 行数据类型 text 和 varchar(max) 在相等时不兼容给运营商。
  • 使用这个命令 --> update [dbo].[tbl_reports] set info = cast(@xml as varchar(max)) where info = cast(@oldXML as varchar(max))跨度>
  • 这可能是因为列信息是'text'类型,并且“数据类型text和varchar(max)在等于运算符中不兼容”。为什么要使用旧的“文本”数据类型?
  • 从一开始就是这样设置的
  • “好的,所以我需要使用第二个光标”几乎可以肯定不是。但我不知道你的代码在做什么。
猜你喜欢
  • 2016-02-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多