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

Откуда: Левый берег
Сообщений: 371
Здравствуйте!
MS SQL SERVER 2017

таблица вида:
create table tst (id [int] identity(1,1) NOT NULL, fv [xml], FieldNameID [varchar(50)])

как сделать запрос вида:
SELECT FieldNameID, fv.value('(/Rec/@' + FieldNameID + ')[1]','int') AS ValueID
FROM tst 

пробовал так, но ошибка синтаксиса
SELECT FieldNameID, fv.value('(/Rec/@*[local-name() = sql:column("FieldNameID")])[1]','int') AS ValueID
FROM tst 
17 мар 20, 14:39    [22100673]     Ответить | Цитировать Сообщить модератору
 Re: XML sql:column  [new]
Алексаша
Member

Откуда: Левый берег
Сообщений: 371
Извините ))) все работает. запутался маленько
17 мар 20, 14:56    [22100688]     Ответить | Цитировать Сообщить модератору
 Re: XML sql:column  [new]
court
Member

Откуда:
Сообщений: 1956
Алексаша
пробовал так, но ошибка синтаксиса
SELECT FieldNameID, fv.value('(/Rec/@*[local-name() = sql:column("FieldNameID")])[1]','int') AS ValueID
FROM tst 

таа ладно :)

drop table if exists tst
create table tst (id [int] identity(1,1) NOT NULL, fv [xml], FieldNameID varchar(50))
insert into tst (fv, FieldNameID) values ('<Rec AvtoID="1" FaceID="2"/>','FaceID'), ('<Rec AvtoID="1"/>','FaceID')

SELECT FieldNameID, fv.value('(/Rec/@*[local-name() = sql:column("FieldNameID")])[1]','int') AS ValueID
FROM tst 


К сообщению приложен файл. Размер - 49Kb
17 мар 20, 14:59    [22100693]     Ответить | Цитировать Сообщить модератору
 Re: XML sql:column  [new]
Алексаша
Member

Откуда: Левый берег
Сообщений: 371
Вырисовалась другая проблема...
Не знаю правильно ли решил тут продолжить.
В целом запрос работает как надо
SELECT FieldNameID, fv.value('(/Rec/@*[local-name() = sql:column("FieldNameID")])[1]','int') AS ValueID
FROM tst 

но если значение поля FieldNameID = 'FaceID', а в структура XML атрибут называется Faceid то метод возвращает NULL. Что посоветуете?
17 мар 20, 18:04    [22100832]     Ответить | Цитировать Сообщить модератору
 Re: XML sql:column  [new]
invm
Member

Откуда: Москва
Сообщений: 9114
Алексаша,

SELECT FieldNameID, fv.value('(/Rec/@*[lower-case(local-name()) = lower-case(sql:column("FieldNameID"))])[1]','int') AS ValueID
FROM @tst
17 мар 20, 18:14    [22100840]     Ответить | Цитировать Сообщить модератору
 Re: XML sql:column  [new]
Алексаша
Member

Откуда: Левый берег
Сообщений: 371
invm,

Спасибо, работает. Только вот скорость заметно падает на 13000 записях к сожалению
18 мар 20, 09:45    [22101094]     Ответить | Цитировать Сообщить модератору
 Re: XML sql:column  [new]
invm
Member

Откуда: Москва
Сообщений: 9114
Алексаша
Только вот скорость заметно падает
Тогда делайте так - 22100465
18 мар 20, 09:49    [22101099]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить