--Можно хранить экземпляры 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)');
--В режиме 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;