SQL2005 XML實體 XML錯誤

2021-08-29 13:21:19 字數 1306 閱讀 6045

job報錯(am 9:30 receive email)

這個是周五的時候發生的問題,乙個原來執行好好的job,早上到公司。老大發來一封郵件,提示如下錯誤:

executed as user: xml 分析: 行 1,字元 57,需要分號 [sqlstate 42000] (error 9411).  the step failed.

沒人改動過儲存過程,那第一判斷應該是「資料有變化」造成的問題。

錯誤重現(am 10:30reproducibility bug

開始查詢問題,只要可以將問題重現,一切都好辦。最後分析下來是將拼接的資料插入xml型別欄位時發生。因為拼接的資料不符合xml規範.比如出現非法字元&

declare @xml xml

set @xml = ''

處理方法(am 11:00 find a way):

問題知道了,可解決這個問題的方法卻讓我頭疼。頭疼不是我不知道怎麼解決(替換&符號就可以了),而是以為ms會提供乙個函式什麼的解決,但目前得到的結論是沒有。既然sql2005支援xml格式,為什麼不提供乙個好的xml格式化的方式了。

嘗試了使用select convert(xml,'')進行轉換還是不行,

msdn上我也沒找到,blogs上也未找到。我的搜尋關鍵字不對?

請教達人,如有好的方法請指教。

我目前的解決方式是。自己寫了乙個函式進行替換。但xml格式比較複雜,還是希望能找到官方提供的方法。 .

create function [dbo].[func_formatxml](@input nvarchar(max))

returns nvarchar(max)

asbegin

--替換非法的xml字串

set @input = replace(@input,'&','&')

set @input = replace(@input,'>','>')

set @input = replace(@input,'>','<')

set @input = replace(@input,'"','"')

set @input = replace(@input,'』',''')

return @inputen

結束(pm 2:00 fix bug)

周五中午例會結束後,問題提交dba。《上班反恐x小時》結束!週末愉快!

google 標記:

sql2005,

xml

XML 實體引用

xml 有 5 個預定的實體引用?xml 文件裡,除了表示乙個標記的開始之外,不允許有小於號 因為小於號 被 xml 解析器解總是被解釋為乙個標記的開始。if age 10 上面的寫法會導致 xml 文件的錯誤。為避免這樣的錯誤,而你又需要在 xml 文件內容裡使用小於號,你可以使用小於號的實體引用...

xml定義實體

1.實體的定義 語法 使用實體 實體名稱 比如 test 注意 定義實體需要解除安裝內部dtd裡面,如果解除安裝外部的dtd裡面,有某些瀏覽器下,內容得不到 xml version 1.0 encoding utf 8 doctype person element str pcdata attlis...

XML 實體擴充套件攻擊

xml entity expansion 攻擊 某種程度上類似於 xml entity expansion,但是它主要試圖通過消耗目標程式的伺服器環境來進行dos攻擊的。這種攻擊基於xml entity expansion實現,通過在xml的doctype中建立自定義實體的定義實現,比如,這種定義可...