SQL Server - 以XML数据类型存储换行符

时间:2009-10-05 19:44:47

标签: sql sql-server xml sql-server-2005 tsql

是否可以在XML数据类型中存储非字母数字字符(更具体地说是换行符)?

下面的代码说明了我的问题:

declare @a xml
declare @b nvarchar(max)

set @b = '<Entry Attrib="1'+CHAR(13)+'2" />'

print @b

set @a=convert(xml,@b,1)

set @b=convert(nvarchar, @a,1)

print @b

输出结果为:

<Entry Attrib="1
2" />
<Entry Attrib="1 2"/>

有什么方法可以保持断线完整吗?

我的实际问题是将值存储在表中(而不是局部变量),所以也许我的表中的相应XML列有一些设置可以完成这项工作吗?

3 个答案:

答案 0 :(得分:2)

这是不可能的。 XML数据类型存储为XML DOM树,而不是字符串。

如果要保留空格,则必须将其存储为varchar。

答案 1 :(得分:2)

我的answer in the XSLT context应该适用于此处:

  

经常存储XML解析的实体   在计算机文件中,用于编辑   方便,组织成行。   这些线通常由分隔线组成   某些角色的组合   回车(#xD)和换行   (#xA)。

所以这可能就是你要找的东西:

set @b = '<Entry Attrib="1&#xA;2" />'

答案 2 :(得分:0)

根据XML规范,XML标记内的空格不被认为是重要的,并且不会被保留。但是,元素之外的空白区域将是:

declare @a xml
declare @b nvarchar(max)

set @b = '<Entry Attrib="12"> fo'+CHAR(13)+'o</Entry>'
print @b
set @a=convert(xml,@b,1)
set @b=convert(nvarchar(max), @a,1)
print @b

将输出:

<Entry Attrib="12"> fo
o</Entry>
<Entry Attrib="12"> fo
o</Entry>