SQL Server: встроенное условное преобразование с XML? - PullRequest
1 голос
/ 15 сентября 2009

Мне нужно преобразовать данные в виде текстовых столбцов в столбцы XML. Однако не весь контент является допустимым XML, поэтому мне нужно игнорировать все строки с недопустимым XML. Есть ли способ, которым я могу отфильтровать недействительные данные, используя какое-либо встроенное условное преобразование или что-то в предложении WHERE?

1 Ответ

1 голос
/ 15 сентября 2009

Похоже, вам нужна версия функции ISNUMERIC для данных XML.

К сожалению, такой встроенной функции не существует, поэтому вам придется разработать собственную альтернативу, для которой есть несколько вариантов:

Если это одноразовый или маломасштабный процесс, для которого производительность не критична, вы можете обрабатывать входные таблицы по одной строке внутри курсора, используя блок TRY...CATCH для обработки недопустимых приведений (не проверено) :

DECLARE xmlCur CURSOR FOR
SELECT textcol 
FROM inputTable

OPEN xmlCur
DECLARE @string nvarchar(MAX)
DECLARE @xml xml

FETCH NEXT FROM xmlCur into @string

WHILE @@fetch_status = 0
BEGIN
    BEGIN TRY
        SET @xml = CAST(@string AS XML)
        -- Do something with XML
    END TRY
    BEGIN CATCH
        -- log failure/mark source row as invalid
    END CATCH

    FETCH NEXT FROM xmlCur into @string
END

CLOSE xmlCur
DEALLOCATE xmlCur 

В качестве альтернативы, если вы знакомы с программированием .Net (и оно включено на вашем сервере), вы можете использовать CLR для создания собственной функции IsXML. Код .Net должен быть не намного сложнее, чем третий пост в этой теме .

Производительность решения CLR может быть не намного лучше, чем у курсора - вам нужно проверить это, чтобы установить это.

(Очевидной вещью, которая не работает, является скалярная функция T-SQL, которая пытается преобразовать поле в XML внутри блока TRY...CATCH. Однако TRY...CATCH недопустимо внутри функция.) * * тысяча двадцать-одна

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