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

Откуда:
Сообщений: 124
Приветствую.

Есть XML -ка.
DECLARE @xmlData XML ='<?xml version="1.0" encoding="windows-1251" standalone="no"?> 
<messages mes="1" mes_number="108">     
<mesParam>         
<number>7</number>
</mesParam> 
</messages>';



Из которой надо вытащить запросом значение 7 , т.е "number".

И никак не получается это сделать, мучаюсь уже час

Вот так по идее должно работать, но возвращает NULL:

SELECT r.value('@number[1]', 'int') as Id
FROM @xmlData.nodes('/messages/mesParam') as col(r)





При этом, mes_number, например, достается без труда:

SELECT r.value('@mes_number[1]', 'int') as Id
FROM @xmlData.nodes('/messages') as col(r)



Подскажите пожалуйста, как достать поле number из данного XML?
3 май 18, 16:41    [21385263]     Ответить | Цитировать Сообщить модератору
 Re: Помогите вытащить значение из XML  [new]
court
Member

Откуда:
Сообщений: 1956
ssms
Вот так по идее должно работать, но возвращает NULL:

SELECT r.value('@number[1]', 'int') as Id
FROM @xmlData.nodes('/messages/mesParam') as col(r)

"Собаку" убери :)
3 май 18, 16:44    [21385272]     Ответить | Цитировать Сообщить модератору
 Re: Помогите вытащить значение из XML  [new]
Konst_One
Member

Откуда:
Сообщений: 11512
DECLARE @xmlData XML ='<messages mes="1" mes_number="108">     
<mesParam>         
<number>7</number>
</mesParam> 
</messages>';

SELECT r.value('number[1]', 'int') as Id
FROM @xmlData.nodes('/messages/mesParam[1]') as col(r)
3 май 18, 16:45    [21385275]     Ответить | Цитировать Сообщить модератору
 Re: Помогите вытащить значение из XML  [new]
ssms
Member

Откуда:
Сообщений: 124
court
ssms
Вот так по идее должно работать, но возвращает NULL:

SELECT r.value('@number[1]', 'int') as Id
FROM @xmlData.nodes('/messages/mesParam') as col(r)

"Собаку" убери :)



Так вот где собака зарыта!!!!
3 май 18, 16:46    [21385280]     Ответить | Цитировать Сообщить модератору
 Re: Помогите вытащить значение из XML  [new]
ssms
Member

Откуда:
Сообщений: 124
Konst_One
DECLARE @xmlData XML ='<messages mes="1" mes_number="108">     
<mesParam>         
<number>7</number>
</mesParam> 
</messages>';

SELECT r.value('number[1]', 'int') as Id
FROM @xmlData.nodes('/messages/mesParam[1]') as col(r)



То, что надо, большое спасибо!!!
3 май 18, 16:46    [21385281]     Ответить | Цитировать Сообщить модератору
 Re: Помогите вытащить значение из XML  [new]
court
Member

Откуда:
Сообщений: 1956
даа, и если не хочешь вот таких "эксцессов"

DECLARE @xmlData XML ='<?xml version="1.0" encoding="windows-1251" standalone="no"?> 
<messages mes="1" mes_number="108">     
<mesParam>         
<number>7</number>
<number></number>
</mesParam> 
</messages>';

SELECT 
	r.value('number[1]', 'int') as Id1
	,r.value('number[2]', 'int') as Id2
FROM @xmlData.nodes('/messages/mesParam') as col(r)

Id1Id2
70


лучше записывать так
DECLARE @xmlData XML ='<?xml version="1.0" encoding="windows-1251" standalone="no"?> 
<messages mes="1" mes_number="108">     
<mesParam>         
<number>7</number>
<number></number>
</mesParam> 
</messages>';

SELECT 
	r.value('(number/text())[1]', 'int') as Id1
	,r.value('(number/text())[2]', 'int') as Id2
FROM @xmlData.nodes('/messages/mesParam') as col(r)

Id1Id2
7NULL
3 май 18, 16:49    [21385295]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить