Образовательный проект «SnakeProject» Михаила Козлова

Навигация

⇒ SQL\T-SQL ⇐

CISCO

Voice(Asterisk\Cisco)

Microsoft

Powershell

Python

FreeBSD and Nix

Общая

WEB Разработка

ORACLE SQL \ JAVA

Мото

Стрельба, пневматика, оружие

Саморазвитие и психология


T-SQL 2012: XML


--Можно хранить экземпляры xml в столбце либо в переменной типа xml.

--Создадим переменную типа XML
DECLARE @per XML = '
<change id="index1">20140215</change>
<change id="index2">20140214</change>
<ddata>Any data
<ddata2>Any data 2
<ddata3>3</ddata3>
</ddata2>
</ddata>
';

--Выборка из XML
--value. Выполняет запрос XQuery к структуре XML и возвращает значение типа SQL, возвращает скалярное значение.
--query ('XQuery'). Определяет запрос XQuery для экземпляра типа данных xml.

SELECT @per.value('(/change/@id)[1]','varchar(MAX)') AS [ch1_id],
    @per.value('(/change[2]/@id)[1]','varchar(MAX)') AS [ch2_id],
    @per.value('change[2]','varchar(MAX)') AS [ch2],
    @per.value('change[1]','varchar(MAX)') AS [ch1];
SELECT 
    @per.query('*') AS [*],
    @per.query('data(*)') AS [data(*)],
    @per.query('data(ddata)'),
    @per.query('data(ddata/ddata2/ddata3)');

SELECT @per.query('(2) = (2)'),
    @per.query('(2) > (2)');


--В режиме RAW создается одиночный элемент <row> для каждой строки набора строк, возвращенного инструкцией SELECT. 
--В режиме AUTO вложенность XML создается эвристически, в зависимости от метода определения инструкции SELECT. 

SELECT DISTINCT t1.filial, t2.Name, t2.pay FROM tsql.dbo.department AS t1
INNER JOIN tsql.dbo.department AS t2
ON t1.filial = t2.filial FOR XML AUTO;

--<t1 filial="A">
--  <t2 Name="kolya" pay="56000.0000" />
--  <t2 Name="tolya" pay="1200.5000" />
--  <t2 Name="vasya" pay="30000.0000" />
--</t1>
--<t1 filial="B">
--  <t2 Name="inna" pay="10000.2000" />
--  <t2 Name="lesha" pay="44000.9000" />
--  <t2 Name="nastya" pay="26000.5000" />
--</t1>

SELECT DISTINCT t1.filial, t2.Name, t2.pay FROM tsql.dbo.department AS t1
INNER JOIN tsql.dbo.department AS t2
ON t1.filial = t2.filial FOR XML RAW;

--<row filial="A" Name="kolya" pay="56000.0000" />
--<row filial="A" Name="tolya" pay="1200.5000" />
--<row filial="A" Name="vasya" pay="30000.0000" />
--<row filial="B" Name="inna" pay="10000.2000" />
--<row filial="B" Name="lesha" pay="44000.9000" />
--<row filial="B" Name="nastya" pay="26000.5000" />


Комментарии пользователей

Эту новость ещё не комментировалиНаписать комментарий
Анонимам нельзя оставоять комментарии, зарегистрируйтесь!

Контакты Группа ВК Сборник материалов по Cisco, Asterisk, Windows Server, Python и Django, SQL и T-SQL, FreeBSD и LinuxКод обмена баннерами Видео к IT статьям на YoutubeВидео на другие темы Смотреть
Мои друзья: Советы, помощь, инструменты для сис.админа, статическая и динамическая маршрутизация, FreeBSD

© Snakeproject.ru создан в 2013 году.
При копировании материала с сайта - оставьте ссылку.
Весь материал на сайте носит ознакомительный характер,
за его использование другими людьми, автор ответственности не несет.

Рейтинг@Mail.ru
Рейтинг@Mail.ru Яндекс.Метрика





Поддержать автора и проект