2015-09-17 90 views
0

以下兩條SQL語句大多數時間都正常工作。最近我得到一個特定的情況下,一個錯誤:將sp_OAMethod輸出轉換爲xml時出錯

消息9420,級別16,狀態1,過程Alcom_Get_Customer_Details,96號線 XML分析:行1,字符399,非法XML字符

誤差產生陳述

Exec @ErrCode=sp_OAMethod @Object, 'responseText', @ResponseText OUTPUT 

SELECT @XmlResponse as XmlResponse 

select @XmlResponse = CAST(@ResponseText as xml) 

當我審視「SELECT @XmlResponse作爲XmlResponse聲明的輸出是唯一的只有361個字符。看起來從362開始有多餘的字符。

如何修復錯誤?

謝謝。

+0

你可以檢查「@ ResponseText」的內容嗎?它實際上是否包含非法XML字符? – har07

+0

我檢查了@ResponseText的內容。不,它不包含任何非法字符。我在VS編輯器中以二進制文件的形式打開了響應。沒有過去的362欄。 –

+0

@ResponseText是:<?xml version =「1.0」encoding =「utf-8」?> \t \t \t \t \t \t 3797167 \t \t \t

回答

0

我的同事給了我一個簡單的答案,只允許字符代碼32到127的所有其它字符被刪除:

CREATE FUNCTION dbo.RemoveNonASCII 
(
     @nstring nvarchar(4000) 
) 
RETURNS varchar(4000) 
AS 
BEGIN 
     DECLARE @Result varchar(4000) 
     SET @Result = '' 

     DECLARE @nchar nvarchar(1) 
     DECLARE @position int 

     SET @position = 1 
     WHILE @position <= LEN(@nstring) 
     BEGIN 
       SET @nchar = SUBSTRING(@nstring, @position, 1) 

       IF UNICODE(@nchar) between 32 and 127 
        SET @Result = @Result + @nchar 
       SET @position = @position + 1 
     END 

     RETURN @Result 
END 

謝謝你給我的同事誰發現了UNICODE功能。