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,'&','&')
SET @Input = REPLACE(@Input,'>','>')
SET @Input = REPLACE(@Input,'>','<')
SET @Input = REPLACE(@Input,'"','"')
SET @Input = REPLACE(@Input,'’',''')
return @Input
EN
结束(PM 2:00 Fix Bug)
周五中午例会结束后,问题提交DBA。《上班反恐X小时》结束!周末愉快!