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

Откуда:
Сообщений: 77
Доброго времени суток!

Есть следующая таблица, полученная запросом:
Картинка с другого сайта.
Столбец Data - xml данные.

Мне нужно выбрать только те строки, которые имеют в столбце Дата только определенное значение field id="42" (в случае ниже - =Клиент).

Запрос для этого я сделал такой:

SELECT
	Id,
Data
FROM
	Task
WHERE
Data.value('data/field42[1]', 'varchar(max)')='Клиент'


В ответ получаю ошибку, что результат не одноэлементный:
Картинка с другого сайта.

Я уже много всего перепробывал, ничего не выходит. Помогите пожалуйста.

П.С. c SQL работаю совсем недавно.

П.П.С. Работаю с SQL Server 2008 R2
20 ноя 14, 20:58    [16881658]     Ответить | Цитировать Сообщить модератору
 Re: Работа с XML-полями  [new]
trew
Member

Откуда: Москва
Сообщений: 2646
Pim.,

declare
    @xml xml = '
<data>
<field ID="42">dd</field>
<field ID="11">d2</field>
<field ID="42">d3</field>
</data>
<data>
<field ID="42">d4</field>
<field ID="21">d5</field>
<field ID="25">d6</field>
</data>'

select 
    a.query('.')
from    @xml.nodes('data') a(a)
where a.query('.').value('(data/field/@ID)[1]', 'int') = 42
    
select 
    a.query('.')
from    @xml.nodes('data/field') a(a)
where a.query('.').value('(/field/@ID)[1]', 'int') = 42
20 ноя 14, 21:31    [16881839]     Ответить | Цитировать Сообщить модератору
 Re: Работа с XML-полями  [new]
trew
Member

Откуда: Москва
Сообщений: 2646
trew,

select 
    a.query('.').value('(/field)[1]', 'varchar(100)')
from    @xml.nodes('data/field') a(a)
where a.query('.').value('(/field/@ID)[1]', 'int') = 42
20 ноя 14, 21:35    [16881868]     Ответить | Цитировать Сообщить модератору
 Re: Работа с XML-полями  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8834
автор
c SQL работаю совсем недавно

SQL здесь совершенно не при чём, изучайте спецификацию Xquery и Xpath.
20 ноя 14, 21:53    [16881948]     Ответить | Цитировать Сообщить модератору
 Re: Работа с XML-полями  [new]
invm
Member

Откуда: Москва
Сообщений: 9844
Pim.
Мне нужно выбрать только те строки, которые имеют в столбце Дата только определенное значение field id="42" (в случае ниже - =Клиент).
declare @t table (id int, x xml);

insert into @t
values
 (1, N'
<data>
<field ID="42">dd</field>
<field ID="42">d2</field>
<field ID="42">d3</field>
</data>'),
 (2, N'
<data>
<field ID="42">Клиент</field>
<field ID="21">d5</field>
<field ID="25">d6</field>
</data>');

select 
 id
from
 @t
where
 x.exist('data/field[@ID = 42 and text() = "Клиент"]') = 1;
?
20 ноя 14, 21:59    [16881962]     Ответить | Цитировать Сообщить модератору
 Re: Работа с XML-полями  [new]
Pim.
Member

Откуда:
Сообщений: 77
trew
Pim.,

declare
    @xml xml = '
<data>
<field ID="42">dd</field>
<field ID="11">d2</field>
<field ID="42">d3</field>
</data>
<data>
<field ID="42">d4</field>
<field ID="21">d5</field>
<field ID="25">d6</field>
</data>'

select 
    a.query('.')
from    @xml.nodes('data') a(a)
where a.query('.').value('(data/field/@ID)[1]', 'int') = 42
    
select 
    a.query('.')
from    @xml.nodes('data/field') a(a)
where a.query('.').value('(/field/@ID)[1]', 'int') = 42


Не понимаю, что есть a.query('.') ???
20 ноя 14, 22:42    [16882101]     Ответить | Цитировать Сообщить модератору
 Re: Работа с XML-полями  [new]
Pim.
Member

Откуда:
Сообщений: 77
trew,

Точнее даже, что есть a(a)?
20 ноя 14, 22:42    [16882107]     Ответить | Цитировать Сообщить модератору
 Re: Работа с XML-полями  [new]
Pim.
Member

Откуда:
Сообщений: 77
invm,

Такой способ не работает... Ноль значений.
20 ноя 14, 23:15    [16882212]     Ответить | Цитировать Сообщить модератору
 Re: Работа с XML-полями  [new]
invm
Member

Откуда: Москва
Сообщений: 9844
Pim.
invm,

Такой способ не работает... Ноль значений.
Вам был дан работающий пример.
Либо вы его неверно переписали под свои таблицы, либо такие у вас данные.
20 ноя 14, 23:41    [16882283]     Ответить | Цитировать Сообщить модератору
 Re: Работа с XML-полями  [new]
Pim.
Member

Откуда:
Сообщений: 77
invm
Pim.
invm,

Такой способ не работает... Ноль значений.
Вам был дан работающий пример.
Либо вы его неверно переписали под свои таблицы, либо такие у вас данные.


У меня Ваш код без изменений не работает, выдает следующую ошибку:

Необходимо объявить табличную переменную "@t".
21 ноя 14, 06:29    [16882615]     Ответить | Цитировать Сообщить модератору
 Re: Работа с XML-полями  [new]
LexusR
Member

Откуда: Novosibirsk
Сообщений: 1887
select 
 id,Data
from
 task
where
 data.exist('data/field[@ID = 42]') = 1;
21 ноя 14, 06:46    [16882624]     Ответить | Цитировать Сообщить модератору
 Re: Работа с XML-полями  [new]
invm
Member

Откуда: Москва
Сообщений: 9844
Pim.
У меня Ваш код без изменений не работает, выдает следующую ошибку:

Необходимо объявить табличную переменную "@t".
А подумать и подставить свою таблицу в запрос не?
21 ноя 14, 09:41    [16883091]     Ответить | Цитировать Сообщить модератору
 Re: Работа с XML-полями  [new]
Pim.
Member

Откуда:
Сообщений: 77
invm,

Ну я сначала подставил в свою, он ничего не вывел, т.е. не нашел таковых.
Ничего не получается.

Следующий запрос
SELECT
	Id,
	Data.exist ('data/field[@ID = 32]')
FROM
	Task


Выдает одни "0", хотя id32 есть у всех, что можно видеть по первому скрину.

Помогите пожалуйста.
23 ноя 14, 23:22    [16893696]     Ответить | Цитировать Сообщить модератору
 Re: Работа с XML-полями  [new]
invm
Member

Откуда: Москва
Сообщений: 9844
Pim.
Выдает одни "0", хотя id32 есть у всех, что можно видеть по первому скрину.
Потому что XML - регистрозависимый. Нужно
SELECT
	Id,
	Data.exist ('data/field[@id = 32]')
FROM
	Task
23 ноя 14, 23:30    [16893727]     Ответить | Цитировать Сообщить модератору
 Re: Работа с XML-полями  [new]
Pim.
Member

Откуда:
Сообщений: 77
invm,

Вы гениальны! Спасибо огромное!
23 ноя 14, 23:34    [16893740]     Ответить | Цитировать Сообщить модератору
 Re: Работа с XML-полями  [new]
Pim.
Member

Откуда:
Сообщений: 77
Pim.,

А Вы не подскажете, как запросом внести изменения определенного поля?

У меня есть таблица в excel со столбцом ID и с определеннным значением конкретного id из Data. как в Data импортировать эти значения?
24 ноя 14, 02:43    [16894134]     Ответить | Цитировать Сообщить модератору
 Re: Работа с XML-полями  [new]
Pim.
Member

Откуда:
Сообщений: 77
invm,

А Вы не подскажете, как запросом внести изменения определенного поля?

У меня есть таблица в excel со столбцом ID и с определеннным значением конкретного id из Data. как в Data импортировать эти значения?
24 ноя 14, 02:44    [16894135]     Ответить | Цитировать Сообщить модератору
 Re: Работа с XML-полями  [new]
Pim.
Member

Откуда:
Сообщений: 77
Pim.,

Вопрос не актуален
24 ноя 14, 04:40    [16894199]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить