将sp_OAMethod输出转换为xml时出错

时间:2015-09-17 00:25:40

标签: xml tsql

以下两个SQL语句大部分时间都可以正常工作。最近我在特定情况下遇到错误:

Msg 9420,Level 16,State 1,Procedure 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开始看起来有无关的字符。

如何解决错误?

谢谢。

1 个答案:

答案 0 :(得分: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功能。