Я пытаюсь создать хранимую процедуру в SQL Server 2016, которая преобразует XML, который ранее был преобразован в Varbinary
, обратно в XML, но при преобразовании появляется ошибка «Недопустимый символ XML». Я нашел обходной путь, который, кажется, работает, но я не могу понять, , почему это работает, что делает меня неудобным.
Хранимая процедура принимает данные, которые были преобразованы в двоичный файл в службах SSIS и вставлены в столбец varbinary(MAX)
в таблице, и выполняет простое
CAST(Column AS XML)
Долгое время он работал нормально, и я только начал видеть проблему, когда начальный XML начал содержать символ ® (зарегистрированный товарный знак).
Теперь, когда я пытаюсь преобразовать двоичный файл в XML, я получаю эту ошибку
Сообщение 9420, Уровень 16, Состояние 1, Строка 23
Синтаксический анализ XML: строка 1, символ 7, недопустимый символ xml
Однако , если я сначала преобразовал двоичный файл в varchar(MAX)
, а затем преобразовал его в XML, похоже, он работает нормально. Я не понимаю, что происходит, когда я выполняю тот промежуточный CAST, который отличается от преобразования непосредственно в XML. Моя главная проблема заключается в том, что я не хочу добавлять его, чтобы учесть этот сценарий, и в результате я получаю непредвиденные последствия.
Тестовый код:
DECLARE @foo VARBINARY(MAX)
DECLARE @bar VARCHAR(MAX)
DECLARE @Nbar NVARCHAR(MAX)
--SELECT Varbinary
SET @foo = CAST( '<Test>®</Test>' AS VARBINARY(MAX))
SELECT @foo AsBinary
--select as binary as varchar
SET @bar = CAST(@foo AS VARCHAR(MAX))
SELECT @bar BinaryAsVarchar -- Correct string output
--select binary as nvarchar
SET @nbar = CAST(@foo AS NVARCHAR(MAX))
SELECT @nbar BinaryAsNvarchar -- Chinese characters
--select binary as XML
SELECT TRY_CAST(@foo AS XML) BinaryAsXML -- ILLEGAL XML character
-- SELECT CONVERT(xml, @obfoo) BinaryAsXML --ILLEGAL XML Character
--select BinaryAsVarcharAsXML
SELECT TRY_CAST(@bar AS XML) BinaryAsVarcharAsXML -- Correct Output
--select BinaryAsNVarcharAsXML
SELECT TRY_CAST(@nbar AS XML) BinaryAsNvarcharAsXML -- Chinese Characters