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

Откуда:
Сообщений: 257
Добрый день.

Есть таблица с полями
a int
b xml

SELECT a,b
FROM dbo.TableTypes cdt
CROSS APPLY (
SELECT TOP(1) cpd.a, cpd.b
FROM dbo.Table1 cpd
WHERE cpd.Id = @Id AND cpd.Type = cdt.TypeId
ORDER BY cpd.VERSION DESC

В поле b хранится xml поле
Как мне его правильно вытащить, пробую сделать следующим образом


SELECT a,b.value(./@Name),b.value(./@DepID),
FROM dbo.TableTypes cdt
CROSS APPLY (
SELECT TOP(1) cpd.a, cpd.b
FROM dbo.Table1 cpd
WHERE cpd.Id = @Id AND cpd.Type = cdt.TypeId
ORDER BY cpd.VERSION DESC
Но выдается ошибка((
Пробовал сделать следующим образом, в перменную загнать поле
SELECT @b = x.value('@Name','VARCHAR(50)')
FROM @XML.nodes('/Document[1]') t(x)

Так работает, но только когда резалсет соситоит из одной строки
set @XML = (select b from Table1 ), понятное дело, если строчек две, то ругнется

Подскажите, плизз, как сделать одним запросо, что я приводил выше
3 фев 14, 19:48    [15512624]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно вытащить поле  [new]
user87
Member

Откуда:
Сообщений: 257
Оформил запрос неверно, делал следующим образом

SELECT a,b.value('@Name','nvarchar(20)') ,b.value.('@Dep','nvarchar(20)')
FROM dbo.TableTypes cdt
CROSS APPLY (
....

Но ошибка все равно остается(
3 фев 14, 21:54    [15512990]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно вытащить поле  [new]
sdet
Member

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

Где полный запрос? что за ошибка? С правилами оформления ознакомьтесь
3 фев 14, 22:13    [15513075]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно вытащить поле  [new]
user87
Member

Откуда:
Сообщений: 257
Вот ошибка

Msg 2390, Level 16, State 1, Line 2
XQuery [dbo.Clien.DocData.value()]: Top-level attribute nodes are not supported
3 фев 14, 22:26    [15513133]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно вытащить поле  [new]
user87
Member

Откуда:
Сообщений: 257
Сам запрос, вырезал лишнее


select cpd.Id, DocData.value('./@Department', 'varchar(50)')
from dbo.DocData cpd
where cpd.Id = 3559
order by cpd.Id desc
3 фев 14, 22:29    [15513152]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно вытащить поле  [new]
user87
Member

Откуда:
Сообщений: 257
Ошибся, когда писал запрос сюда

select cpd.Id, DocData.value('./@Department', 'varchar(50)')
from dbo.Clien cpd
where cpd.Id = 3559
order by cpd.Id desc
3 фев 14, 22:33    [15513169]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно вытащить поле  [new]
sdet
Member

Откуда:
Сообщений: 463
user87,
так надо [1] добавлять
value('(./@Department)[1]', 'varchar(50)')

или через cross apply
3 фев 14, 22:52    [15513252]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно вытащить поле  [new]
user87
Member

Откуда:
Сообщений: 257
Попробовал сделать как Вы сказали, теперь другая ошибка

Msg 9500, Level 16, State 1, Line 3
The data type 'varchar(50))' used in the VALUE method is invalid.

Вроде все скобки расставил правильно(
3 фев 14, 22:59    [15513281]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно вытащить поле  [new]
user87
Member

Откуда:
Сообщений: 257
Попробовал вот так

DocData.value('./@Department[1]', 'varchar(50)')
Msg 2390, Level 16, State 1, Line 2
XQuery [dbo.Client.DocData.value()]: Top-level attribute nodes are not supported
3 фев 14, 23:04    [15513294]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно вытащить поле  [new]
sdet
Member

Откуда:
Сообщений: 463
user87,
select cpd.Id, C.value('@Department', 'varchar(50)')
.....
FROM dbo.TableTypes cdt
cross apply cdt.DocData.nodes(xpath) as X(C)
3 фев 14, 23:21    [15513384]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно вытащить поле  [new]
sdet
Member

Откуда:
Сообщений: 463
user87,
xpath путь к атрибуту напр ('Root/Document')
3 фев 14, 23:31    [15513420]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно вытащить поле  [new]
user87
Member

Откуда:
Сообщений: 257
Даже не знаю как выразить Вам свою благодарность.

ОГРОМНОЕ СПАСИБО, хоть домой можно спокойно поехать)
3 фев 14, 23:54    [15513516]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить