【问题标题】:How to delete xml node from ntext column in SQL如何从 SQL 中的 ntext 列中删除 xml 节点
【发布时间】:2015-07-03 14:04:00
【问题描述】:

我有一个表,其列类型为ntext。此列包含 xml 作为字符串

我想删除一个可以多次存在的元素。

我该怎么做?

xml 输入示例:

<CATALOG>
    <CD>
        <TITLE>Empire Burlesque</TITLE>
        <ARTIST>Bob Dylan</ARTIST>
        <COUNTRY>USA</COUNTRY>
        <COMPANY>Columbia</COMPANY>
        <PRICE>10.90</PRICE>
        <YEAR>1985</YEAR>
    </CD>
    <CD>
        <TITLE>Hide your heart</TITLE>
        <ARTIST>Bonnie Tyler</ARTIST>
        <COUNTRY>UK</COUNTRY>
        <COMPANY>CBS Records</COMPANY>
        <PRICE>9.90</PRICE>
        <YEAR>1988</YEAR>
    </CD>
</CATALOG>

我想用 SQL 更新脚本删除节点 COUNTRY

【问题讨论】:

  • ntexttextimage 数据类型将在 SQL Server 的未来版本中删除。避免在新的开发工作中使用这些数据类型,并计划修改当前使用它们的应用程序。请改用nvarchar(max)varchar(max)varbinary(max)See details here。如果您的列确实包含 XML - 您应该在 SQL Server 2005 和更新版本中真正使用 XML 数据类型
  • 如果你的专栏真的是ntext(不应该是),它的内容只是一段文本。除了解析它并自行删除节点之外,别无他法。最好的解决方案是将其更改为 xml 列并使用专门的方法,但如果这不可能,我想下一个最佳选择是在客户端使用专用的 xml 解析函数。
  • 不幸的是它是 ntext。它是一个旧数据库,我无法将列更改为其他类型。

标签: sql sql-server


【解决方案1】:

如果你需要这样做,那么你必须

  • 将数据加载到XML类型的SQL变量中
  • 对该变量执行修改
  • 再次更新您的表格

所以你需要做这样的事情:

DECLARE @XmlVar XML

SELECT @XmlVar = CAST(YourNtextColumn AS XML)
FROM dbo.YourTable
WHERE ID = 123

SET @XmlVar.modify('delete /CATALOG//CD/COUNTRY')

SELECT @XmlVar

现在最后,您必须将修改后的 XML 变量写回到您的表中。问题是:你不能从XML 转换为NTEXT ......所以你应该真正首先修复你的表结构(首先将该列设为XML! ) 在浪费时间尝试更新这种已弃用的列类型之前...

【讨论】:

  • 感谢您的回答。我已经做了一个 SQL 命令来删除我想要的节点。
猜你喜欢
  • 2021-11-16
  • 2019-04-12
  • 2021-06-14
  • 1970-01-01
  • 1970-01-01
  • 2011-11-15
  • 1970-01-01
  • 2016-01-23
  • 1970-01-01
相关资源
最近更新 更多