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

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

есть таблица
create table tst (id [int] identity(1,1) NOT NULL, fv [xml])


есть запрос:
SELECT *
FROM tst 
WHERE fv.value('(/Rec/@AvtoID)[1]','int') = 100


как переделать запрос чтобы была возможность:
DECLARE @v VARCHAR(50) = 'FaceID'
SELECT *
FROM tst 
WHERE fv.value('(/Rec/@' + @v+ ')[1]','int') = 100

в таком виде ругается, что аргумент должен быть строковым литералом
17 мар 20, 10:38    [22100412]     Ответить | Цитировать Сообщить модератору
 Re: запрос XML  [new]
court
Member

Откуда:
Сообщений: 1956
DECLARE @v VARCHAR(50) = 'FaceID'
SELECT *
FROM tst 
cross apply fv.nodes('/Rec/@*') as t(c)
where t.c.value('local-name(.)', 'varchar(20)') = @v and t.c.value('.', 'int')  = 100
17 мар 20, 11:33    [22100465]     Ответить | Цитировать Сообщить модератору
 Re: запрос XML  [new]
invm
Member

Откуда: Москва
Сообщений: 9114
DECLARE @v VARCHAR(50) = 'FaceID'
SELECT *
FROM tst 
WHERE fv.value('(/Rec/@*[local-name() = sql:variable("@v")])[1]','int') = 100
17 мар 20, 11:51    [22100478]     Ответить | Цитировать Сообщить модератору
 Re: запрос XML  [new]
Алексаша
Member

Откуда: Левый берег
Сообщений: 371
Всем спасибо!
17 мар 20, 12:19    [22100511]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить