以下两个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开始看起来有无关的字符。
如何解决错误?
谢谢。
答案 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功能。