T-SQL XML - 如何在xml节点中划分CDATA

时间:2013-04-18 09:18:54

标签: xml tsql sql-server-2012 cdata

我正在使用MS SQL Server 2012并具有以下XML结构:

<value name="parameter">
    <![CDATA[__na__]]>
    <![CDATA[1]]>
    <![CDATA[2]]>
    <![CDATA[3]]>
    <![CDATA[12]]>
</value>

并将其作为字符串保存在NVARCHAR(MAX)数据类型字段中。

当我按如下方式转换此值时:

CAST(ColumnValue AS XML)

我得到以下XML结构:

<value name="parameter">__na__12312</value>

有没有办法用exmasple的逗号分隔CDATA并获得以下结构:

<value name="parameter">__na__,1,2,3,12</value>

在我的实际情况中,字符串长度可以变化,我只使用整个XML的一部分,因此替换每个']]&gt;'使用']]&gt;,'听起来不是很好的解决方案。还有其他办法吗?

1 个答案:

答案 0 :(得分:0)

如果你不介意让第一个字符带有前缀逗号,你可以试试这个:

/*Loading test data*/
declare @xml varchar(8000)
set @xml = '
<value name="parameter">
    <![CDATA[__na__]]>
    <![CDATA[1]]>
    <![CDATA[2]]>
    <![CDATA[3]]>
    <![CDATA[12]]>
</value>'

/*the replace*/
set @xml= REPLACE(@xml,'<![CDATA[','<![CDATA[,' )
select CAST(@xml AS XML)

这将导致:

<value name="parameter">,__na__    ,1    ,2    ,3    ,12    </value>

此替换确保您只更改CDATA而不是其他xml参数或值,当您恢复值“parameter”时,您只需要忽略第一个字符