SQL2005 - XML实体(XML错误)

Job报错(AM 9:30 Receive Email)

这个是周五的时候发生的问题,一个原来运行好好的JOB,早上到公司。老大发来一封邮件,提示如下错误:

Executed as user: XML 分析: 行 1,字符 57,需要分号 [SQLSTATE 42000] (Error 9411).  The step failed.

没人改动过存储过程,那第一判断应该是“数据有变化”造成的问题。

错误重现(AM 10:30 Reproducibility BUG

开始查找问题,只要可以将问题重现,一切都好办。最后分析下来是将拼接的数据插入XML类型字段时发生。因为拼接的数据不符合XML规范.比如出现非法字符&

DECLARE @XML XML
SET @XML = '<User Name="CM&PP"></User>'

处理方法(AM 11:00 Find a Way):

问题知道了,可解决这个问题的方法却让我头疼。头疼不是我不知道怎么解决(替换&符号就可以了),而是以为MS会提供一个函数什么的解决,但目前得到的结论是没有。既然SQL2005支持XML格式,为什么不提供一个好的XML格式化的方式了。

尝试了使用SELECT CONVERT(XML,'<User Name="CM&PP"></User>')进行转换还是不行,

MSDN上我也没找到,Blogs上也未找到。我的搜索关键字不对?

请教达人,如有好的方法请指教。

我目前的解决方式是。自己写了一个函数进行替换。但XML格式比较复杂,还是希望能找到官方提供的方法。 .

CREATE function [dbo].[Func_FormatXML](@Input NVARCHAR(MAX))
returns NVARCHAR(MAX)
as
BEGIN
    --替换非法的XML字符串
    SET @Input = REPLACE(@Input,'&','&amp;')
    SET @Input = REPLACE(@Input,'>','&gt')
    SET @Input = REPLACE(@Input,'>','&lt;')
    SET @Input = REPLACE(@Input,'"','&quot;')
    SET @Input = REPLACE(@Input,'’','&apos;')
    return @Input
EN

结束(PM 2:00 Fix Bug)

周五中午例会结束后,问题提交DBA。《上班反恐X小时》结束!周末愉快!

Google 标记: SQL2005, XML

你可能感兴趣的:(xml,Google)