Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

SQL Server:вградено условно конвертиране с XML?

Изглежда, че имате нужда от версия на 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 не е разрешено във функция.)




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как мога да присвоя вмъкната изходна стойност на променлива в sql сървър?

  2. Грешка:Трябва да се декларира скаларната променлива за изрази за вмъкване в множество бази данни

  3. Използвайте Създаване на изявление за създаване на таблица в SQL Server - SQL Server / T-SQL урок, част 34

  4. SQL Server - Редът на колоните има ли значение?

  5. 5 начина да коригирате грешката „Деление на нула“ в SQL Server (Msg 8134)