Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 TRY_CAST XML(Schema)  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4831
Прошу заценить следующий код

use tempdb 
go 

CREATE XML SCHEMA COLLECTION CodeProjectSchemaCollection

AS

N'<?xml version="1.0"?>

 <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"

 targetNamespace="http://samplewebsite.com/CodeProjectSchema"

 xmlns="http://samplewebsite.com/CodeProjectSchema"

 elementFormDefault="qualified">

 <xs:element name="Article">

 <xs:complexType>

 <xs:attribute name="Author" type="xs:string" />

 <xs:attribute name="Title" type="xs:string" />

 <xs:attribute name="Rating" type="xs:decimal" />

 </xs:complexType>

 </xs:element>

 </xs:schema>

';



SELECT TRY_CAST(N'<?xml version="1.0"?><Article xmlns="http://samplewebsite.com/CodeProjectSchema" Author="Me" Title="XMLPost1" Rating="0.1" />' AS XML(DOCUMENT CodeProjectSchemaCollection)) 

GO

SELECT TRY_CAST(N'<?xml version="1.0"?><Article xmlns="http://samplewebsite.com/CodeProjectSchema" Author="Me" Title="XMLPost1" Rating="Zero" />' AS XML(DOCUMENT CodeProjectSchemaCollection))

GO


Мой коллега пытается "по быстренькому" провалидировать XML на уровне SQL. Для этого он делает TRY_CAST к типу XML с указанием коллекции схем. См код. Но проблема в том, что TRY_CAST вместо того, чтобы вернуть NULL в случае невалидности, валит весь запрос по ошибке. Вопрос, у кого-то есть идеи как это обойти?
18 июл 14, 14:28    [16325226]     Ответить | Цитировать Сообщить модератору
 Re: TRY_CAST XML(Schema)  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37224
Завернуть в try/catch?
18 июл 14, 15:12    [16325651]     Ответить | Цитировать Сообщить модератору
 Re: TRY_CAST XML(Schema)  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4831
Гавриленко Сергей Алексеевич
Завернуть в try/catch?


Весь смысл в том, что надо запросом провалидивать много XML-ей которые лежат varchar поле. Понятно, что TRY CATCH подавит ошибку
18 июл 14, 15:13    [16325666]     Ответить | Цитировать Сообщить модератору
 Re: TRY_CAST XML(Schema)  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8570
SELECT TRY_CONVERT(XML(DOCUMENT CodeProjectSchemaCollection),N'<?xml version="1.0"?><Article xmlns="http://samplewebsite.com/CodeProjectSchema" Author="Me" Title="XMLPost1" Rating="Zero" />')


TRY_CAST не подсвечивается интеллисенсом ан 2012.
18 июл 14, 16:07    [16326053]     Ответить | Цитировать Сообщить модератору
 Re: TRY_CAST XML(Schema)  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4831
Владислав Колосов,

TRY_CONVERT(XML(DOCUMENT CodeProjectSchemaCollection)... точно также падает
18 июл 14, 16:13    [16326081]     Ответить | Цитировать Сообщить модератору
 Re: TRY_CAST XML(Schema)  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8570
автор
Однако в случае, если будет запрошено явно запрещенное преобразование, функция TRY_CONVERT возвратит ошибку.
18 июл 14, 16:37    [16326203]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить