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

Откуда: г. Димитровград, ООО "АИС Город"
Сообщений: 144
Здравствуйте, подскажите как реализовать запрос в sql для получения наименования тега, из которого происходит выборка.

На примере:
DECLARE @data VARCHAR(200), @dataXml xml
SELECT @data = '<data><t1><item>11</item></t1><t2><item>22</item></t2></data>'

SELECT @dataXml = CAST(@data AS xml)

SELECT 
	T.d.value('(item)[1]', 'varchar(100)') [item]
FROM @dataXml.nodes('(/data/t1,/data/t2)') T(d)

--необходимо вывести
--item	type
--11    t1
--22    t2


Понимаю, что можно разделить на 2 запроса, проблема в том, что у меня этих t1, t2, tn очень много, можно ли как-то реализовать в одном обращении к xml данным?
15 ноя 14, 10:52    [16850501]     Ответить | Цитировать Сообщить модератору
 Re: Получение наименования тега в xml  [new]
invm
Member

Откуда: Москва
Сообщений: 9687
SELECT 
	T.d.value('(item)[1]', 'varchar(100)') [item],
    cast(T.d.query('local-name(.)') as nvarchar(100)) as [type]
FROM @dataXml.nodes('(/data/t1,/data/t2)') T(d)
15 ноя 14, 11:20    [16850539]     Ответить | Цитировать Сообщить модератору
 Re: Получение наименования тега в xml  [new]
cha0ss
Member

Откуда: г. Димитровград, ООО "АИС Город"
Сообщений: 144
invm,

большое спасибо, все работает
15 ноя 14, 11:38    [16850591]     Ответить | Цитировать Сообщить модератору
 Re: Получение наименования тега в xml  [new]
LexusR
Member

Откуда: Novosibirsk
Сообщений: 1887
если ...проблема в том, что у меня этих t1, t2, tn очень много,
то не надо писать nodes('(/data/t1,/data/t2)')

DECLARE @data VARCHAR(200), @dataXml xml
SELECT @data = '<data><t1><item>11</item></t1><t2><item>22</item></t2><tn><item>9999</item></tn></data>'

SELECT @dataXml = CAST(@data AS xml)

--SELECT 
--	T.d.value('(item)[1]', 'varchar(100)') [item]
--FROM @dataXml.nodes('(/data/t1,/data/t2)') T(d)


SELECT 
	T.d.value('(item)[1]', 'varchar(100)') [item],
    cast(T.d.query('local-name(.)') as nvarchar(100)) as [type]
FROM @dataXml.nodes('/data/node()') T(d)
17 ноя 14, 07:55    [16856216]     Ответить | Цитировать Сообщить модератору
 Re: Получение наименования тега в xml  [new]
cha0ss
Member

Откуда: г. Димитровград, ООО "АИС Город"
Сообщений: 144
LexusR,

еще лучше, всем большое спасибо
17 ноя 14, 08:19    [16856245]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить