Sql server 作为一种类型,为什么我不能使用XML EXPLICIT来创建CDATA?

Sql server 作为一种类型,为什么我不能使用XML EXPLICIT来创建CDATA?,sql-server,xml,Sql Server,Xml,我目前有一个类似于以下的SQL语句,我已经消除了一些复杂性: 选择 名称为“@Name” , 选择foo.Name作为'@Name',选择foo.Key作为'@Key' 来自富 对于XML路径'foo',根'foos',键入 , 选择 1作为标签 ,作为父项为空 ,bar.Name为'bar!1.名字' ,bar.Key为“bar!”!1.钥匙' ,bar.Content为“bar!1.cdata' 从酒吧 对于XML显式,根“条”,键入 来自巴兹 对于XML路径'baz',根'bazzes'

我目前有一个类似于以下的SQL语句,我已经消除了一些复杂性:

选择 名称为“@Name” , 选择foo.Name作为'@Name',选择foo.Key作为'@Key' 来自富 对于XML路径'foo',根'foos',键入 , 选择 1作为标签 ,作为父项为空 ,bar.Name为'bar!1.名字' ,bar.Key为“bar!”!1.钥匙' ,bar.Content为“bar!1.cdata' 从酒吧 对于XML显式,根“条”,键入 来自巴兹 对于XML路径'baz',根'bazzes' 此查询的结果是一个很好的XML值,如下所示:

内容 请注意,content元素没有预期的CDATA标记,我知道这一点,因为我已将其指定为类型

但是,当我删除该类型时,整个内容元素get的编码将变为:

内容等。 如何保持查询结果为有效的xml值并删除类型参数,以便正确获取CDATA标记:

正如你所发现的。

在for xml路径查询中使用子查询会将该子查询的结果更改为xml数据类型,无论是否使用type指令


我可以为你找到两个解决办法。将整个查询更改为用于xml explicit,或者对xml执行一些后处理字符串操作,用值的CDATA表示形式替换内容节点的值。

为此,我发现sqlserver对数据进行了编码并删除了CDATA标记,这实际上也可以满足我的需要,所以危机得以避免!