Безопасное приведение текста в XML - PullRequest
5 голосов
/ 20 апреля 2011

У меня более миллиона строк в базе данных SQLServer2005 с текстовым столбцом, содержащим строки XML. Я хочу преобразовать текст в тип данных XML, чтобы извлечь части данных.

Проблема в том, что есть некоторые записи, которые будут выдавать ошибки при приведении (например, неверный XML). Как я могу игнорировать эти ошибки, чтобы весь действительный XML был приведен правильно, а неправильный XML был сохранен как ноль?

Ответы [ 3 ]

5 голосов
/ 20 апреля 2011

Оказавшись в аналогичной ситуации, я добавил столбец XML в ту же таблицу, что и столбец Текст. Затем я использовал процесс RBAR, чтобы попытаться скопировать «XML» из текстового столбца в новый столбец XML (не самый быстрый, но фиксирующий отдельные записи, и это будет разовая вещь, верно?). Предполагается, что ваша таблица имеет PK типа данных int.

declare @minid int, @maxid int;

select @minid=min(ID), @maxid=max(ID) from XMLTable;

while @minid <= @maxid
begin

begin try

update t
set XMLColumn = cast(TextColumn as XML)
from XMLTable t
where ID = @minid;

set @minid = @minid+1

end try
begin catch

print('XML transform failed on record ID:'+cast(@minid as varchar))

--advance to the next record
set @minid = @minid+1
end catch


end
2 голосов
/ 16 июля 2015

Я знаю, что это функциональность SQL Server 2012+, но поскольку этот вопрос является лучшим результатом Google, он выглядит так:

SELECT 
COALESCE(TRY_CONVERT(xml, '</bad xml>'), 'InvalidXML')

Документацию можно найти здесь: TRY_CONVERT (Transact-SQL)

0 голосов
/ 20 апреля 2011

другой возможностью является написание сборки .net, которая загружает XML в XML-документ, возвращает BOOL, если XML действителен, так что вы можете фактически проанализировать его в SQL

.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...