2015-09-17 4 views
0

Следующие два оператора SQL отлично работают в большинстве случаев. В последнее время я получаю ошибку в конкретном случае:Ошибка преобразования вывода sp_OAMethod в xml

Msg 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: \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.

Смежные вопросы