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

Откуда: Saint-Petersburg
Сообщений: 10
Помогите новичку.

Есть таблица в базе, в ней в одном из полей - xml структура. Тип поля xml.

CREATE TABLE [dbo].[Task](
	[Id] [int] IDENTITY(1,1) NOT NULL,
	[StatusId] [int] NOT NULL,
	[ServiceId] [int] NOT NULL,
	[CreatorId] [int] NOT NULL,
	[Data] [xml] NULL,
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

GO


data это что-то типа:

<data>
<field id="1171">2018-07-10 00:00</field>
<field id="1172">84</field>
<field id="1173">95</field>
<field id="1174">Документация</field>
<field id="1175">Профилактика</field>
<field id="1190">Иванов Иван Иванович</field>
</data>

В нашей выборке структура везде одинаковая.

SELECT id, statusid, creatorid, data  FROM [dbo].[Task] where serviceid=74

id	statusid	creatorid	data
4983	28	35822	<data><field id="1171">2018-07-10 00:00</field><field id="1172">84</field><field id="1173">95</field><field id="1174">Документация</field><field id="1175">Профилактика</field><field id="1190">Иванов Иван Иванович</field></data>
4978	28	35904	<data><field id="1171">2018-07-11 00:00</field><field id="1172">78</field><field id="1173">714</field><field id="1174">испытание</field><field id="1175">город</field><field id="1190" /></data>
4975	28	35846	<data><field id="1171">2018-07-10 00:00</field><field id="1172">82</field><field id="1173">96</field><field id="1174">Прием</field><field id="1175">Офис</field><field id="1190" /></data>


Требуется получить развернутую табличку, вместе с данными лежащими в xml'е, в виде отдельных столбцов.

Понимаю что не сложно, но в SQL ничего сложнее select from where Не использовал...
А в идеале еще бы выборку ограничить по одному из field id.
Там еще join ы из других таблиц добавятся, дабы Id шники заменить на вменяемые значения но это я уж сам, там хоть понятно в целом.


Всегда Ваш, konst
10 июл 18, 18:51    [21560306]     Ответить | Цитировать Сообщить модератору
 Re: select из xml  [new]
invm
Member

Откуда: Москва
Сообщений: 9116
select
 t.id,
 t.statusid,
 t.creatorid,
 d.n.value('(field[@id = "1171"])[1]', 'varchar(30)') as field1171,
 d.n.value('(field[@id = "1172"])[1]', 'varchar(30)') as field1172,
 ...
 d.n.value('(field[@id = "1190"])[1]', 'varchar(30)') as field1190
from
 [dbo].[Task] t cross apply
 t.data.nodes('/data') d(n)
where
 t.serviceid=74
10 июл 18, 19:16    [21560346]     Ответить | Цитировать Сообщить модератору
 Re: select из xml  [new]
superkonst
Member

Откуда: Saint-Petersburg
Сообщений: 10
Это магия... :)

Да. Спасибо! То что нужно.
Ну и по крайней мере в целом понятно как делать и куда копать, если результат не устроит.
11 июл 18, 09:26    [21561261]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить