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

Откуда: Москва
Сообщений: 180
Есть таблица #t с XML полем
declare @xml_1 xml = '
<Config>
<Param id="1" name="P1"></Param>
<Param id="2" name="P2"></Param>
</Config>'
declare @xml_2 xml = '
<Config>
<Param id="3" name="P3"></Param>
<Param id="4" name="P4"></Param>
</Config>'

create table #t (id int, Config xml)
insert #t (id, Config) 
select 1, @xml_1 union all
select 2, @xml_2  


Как выбрать все параметры из одной переменной - разобрался:
SELECT    
 colParam.value('@id', 'int') as idParam
,colParam.value('@name', 'varchar(50)') as nmParam
FROM 
 @xml_2.nodes('/Config/Param') col(colParam)


Вопрос: как выбрать все параметры из таблицы?
То есть, как получить результат:

id; idParam; nmParam
1; 1; P1
1; 2; P2
2; 3; P3
2; 4; P4
17 янв 17, 10:09    [20113128]     Ответить | Цитировать Сообщить модератору
 Re: Поиск по полю XML  [new]
iljy
Member

Откуда:
Сообщений: 8711
Молодой,

эммм....

выбрать все параметры из одной переменной
union all
выбрать все параметры из другой переменной

?
17 янв 17, 10:26    [20113212]     Ответить | Цитировать Сообщить модератору
 Re: Поиск по полю XML  [new]
iljy
Member

Откуда:
Сообщений: 8711
Молодой,

а, или имеется ввиду, что переменные в таблице?

select *
from #t
   cross apply (
        выбрать все параметры из одной переменной  
)a
17 янв 17, 10:28    [20113225]     Ответить | Цитировать Сообщить модератору
 Re: Поиск по полю XML  [new]
invm
Member

Откуда: Москва
Сообщений: 9913
SELECT    
 colParam.value('@id', 'int') as idParam
,colParam.value('@name', 'varchar(50)') as nmParam
FROM
 #t t cross apply 
 t.Config.nodes('/Config/Param') col(colParam)
17 янв 17, 10:36    [20113284]     Ответить | Цитировать Сообщить модератору
 Re: Поиск по полю XML  [new]
Молодой
Member

Откуда: Москва
Сообщений: 180
iljy, invm - Большое спасибо. То что надо!

select t.id, a.*
from #t t cross apply (
SELECT    
 colParam.value('@id', 'int') as idParam
,colParam.value('@name', 'varchar(50)') as nmParam
FROM 
 t.Config.nodes('/Config/Param') col(colParam)
)a

SELECT t.id   
,colParam.value('@id', 'int') as idParam
,colParam.value('@name', 'varchar(50)') as nmParam
FROM
 #t t cross apply 
 t.Config.nodes('/Config/Param') col(colParam)


Вопрос закрыт.
17 янв 17, 10:41    [20113323]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить