【发布时间】:2021-04-05 14:20:06
【问题描述】:
我有一个表,其中一列的数据类型为 XML。
CREATE TABLE Employee
(
ID INT,
Name VARCHAR(200),
ExtraInfo XML
)
我必须为 ExtraInfo 列使用 XML 数据类型,并且我有以下 INSERT 语句
INSERT INTO Employee
VALUES
(1, 'John Doe',
CONVERT(XML, '<root><section><![CDATA[Some weird content with weird characters (*&#^@$]]></section></root>'))
上面的语句执行完后,我在ExtraInfo栏目中得到了如下结果。
<root>
<section>Some weird content with weird characters (*&#^@$</section>
</root>
如何保持我的CDATA 部分完好无损?
我已经检查了other related question,这不是我想要的。
【问题讨论】:
-
您的
CREATE TABLE语句需要使用 括号 (CREATE TABLE (......)) - 而不是花括号 ({ ... }) 才能成为有效的 T-SQL 代码... -
这是预期行为 - 由于 xml 准则,某些字符被转义
-
进一步详细说明 - 将 xml 数据类型更改为字符串并执行相同的插入,你会明白我的意思。
-
@DougCoats 这些关于 CDATA 转义子句的准则是否在某处规定了?我查了 MSDN,一无所获。
-
您无法在这方面调整 SQL Server 的 XML 编码行为。如果需要,您唯一能做的就是将数据存储为
NVARCHAR(MAX)——但是使用 XML 方法对其进行的任何操作都将导致 CDATA 再次被重新编码。请注意,您在此处获得的标记是等价的(如果您使用.value查询section的内容,您将得到正确的数据)即使它不是相同.
标签: sql-server sqlxml