如何从SQL

时间:2015-07-03 14:04:01

标签: sql sql-server

我有一个包含ntext类型列的表。此列包含xml as string

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

我该怎么做?

示例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

1 个答案:

答案 0 :(得分: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 ......因此您应首先真正修复您的表格结构(将该列设为{{1}首先!)在浪费时间尝试更新这个已弃用的列类型之前!