Использование XML-типа

Так как XML-тип является встроенным типом, его можно использовать почти везде, где разрешено использование обычных типов.

Например, можно создать функцию, которая возвращает суммарный доход всех членов семьи:

create function dbo.FamIncomeSum(@xml xml) returns intbegin return @xml::value('sum(/fam/*/@income)', 'int')end

и использовать ее следующим образом:

select dbo.FamIncomeSum(fam)from fams

На поля XML-типа можно накладывать ограничения (check constraints), например следующее ограничение не позволит вставить в таблицу fams семью, у элемента husband которой отсутствует атрибут @income (хотя лучше для таких целей использовать XSD):

create table fams(id int identity primary key, fam xml check(fam::exist('/fam/husband/@income') = 1))

Если вы еще не привыкли к XQuery (который я старался не использовать в предыдущих примерах, обходясь синтаксисом старого XPath 1.0), вы можете создать удобное представление (view) на основе XML-поля. Следующее view отображает некоторые данные таблицы fams в реляционном виде:

create view dbo.v_famsasselect id, fam::value('/fam/husband/@income', 'int') as HusbandIncome, fam::value('/fam/wife/@income', 'int') as WifeIncome, fam::value('/fam/son/@income', 'int') as SonIncomefrom dbo.fams

К сожалению, на подобных представлениях нельзя строить кластерные индексы, поэтому единственным шансом повысить производительность запросов является построение специального XML-индекса.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: