Проект «SnakeProject» Михаила КозловаРегистрация

Навигация
⇒SQL\T-SQL⇒

⇐CISCO
⇐Voice(Asterisk\Cisco)
⇐Microsoft
⇐Powershell
⇐Python
⇐FreeBSD and Nix
⇐1С
⇐Общая
⇐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" />


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

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

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


Яндекс.Метрика

Goon Каталог сайтов Рейтинг@Mail.ru