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

Откуда:
Сообщений: 287
Здравствуйте, подскажите как покороче сделать запрос.


Задача:
На сервер приходит значени от клиента со списком идентификаторов разделенных запятой.
DECLARE @cParamList nvarchar(200)
SET @cParamList = 'RASHODI,VIRUCHKA'

Можно конечно отпарсить циклом, чтобы сделать SET @cParamList = 'RASHODI','VIRUCHKA'

А может есть вариант без парсирования, а я не знаю? Чтобы приблизительно так обойтись:


DECLARE @cParamList nvarchar(200)
SET @cParamList = 'RASHODI,VIRUCHKA'

select * from accounts where short_name in (@cParamList)
8 авг 11, 18:38    [11087856]     Ответить | Цитировать Сообщить модератору
 Re: запрос со списком значений  [new]
подстрокавстроке
Guest
Пашок,

"присутствует ли подстрока в строке" - LIKE
8 авг 11, 18:45    [11087884]     Ответить | Цитировать Сообщить модератору
 Re: запрос со списком значений  [new]
ё
Guest
Пашок
Здравствуйте, подскажите как покороче сделать запрос.


Задача:
На сервер приходит значени от клиента со списком идентификаторов разделенных запятой.
DECLARE @cParamList nvarchar(200)
SET @cParamList = 'RASHODI,VIRUCHKA'

Можно конечно отпарсить циклом, чтобы сделать SET @cParamList = 'RASHODI','VIRUCHKA'

А может есть вариант без парсирования, а я не знаю? Чтобы приблизительно так обойтись:


DECLARE @cParamList nvarchar(200)
SET @cParamList = 'RASHODI,VIRUCHKA'

select * from accounts where short_name in (@cParamList)

DECLARE @cParamList nvarchar(200)
SET @cParamList = 'RASHODI,VIRUCHKA'

exec('select * from accounts where short_name in (' + @cParamList + ')'
8 авг 11, 18:46    [11087891]     Ответить | Цитировать Сообщить модератору
 Re: запрос со списком значений  [new]
подстрокавстроке
Guest
ё
Пашок
Здравствуйте, подскажите как покороче сделать запрос.


Задача:
На сервер приходит значени от клиента со списком идентификаторов разделенных запятой.
DECLARE @cParamList nvarchar(200)
SET @cParamList = 'RASHODI,VIRUCHKA'

Можно конечно отпарсить циклом, чтобы сделать SET @cParamList = 'RASHODI','VIRUCHKA'

А может есть вариант без парсирования, а я не знаю? Чтобы приблизительно так обойтись:


DECLARE @cParamList nvarchar(200)
SET @cParamList = 'RASHODI,VIRUCHKA'

select * from accounts where short_name in (@cParamList)

DECLARE @cParamList nvarchar(200)
SET @cParamList = 'RASHODI,VIRUCHKA'

exec('select * from accounts where short_name in (' + @cParamList + ')'


такой вариант бесспорно будет быстрее
8 авг 11, 18:49    [11087908]     Ответить | Цитировать Сообщить модератору
 Re: запрос со списком значений  [new]
Пашок
Member

Откуда:
Сообщений: 287
подстрокавстроке
ё
пропущено...

DECLARE @cParamList nvarchar(200)
SET @cParamList = 'RASHODI,VIRUCHKA'

exec('select * from accounts where short_name in (' + @cParamList + ')'


такой вариант бесспорно будет быстрее


Не, не, так не сработает.

Задача по сути заключается как

SET @cParamList = 'RASHODI,VIRUCHKA'
преварить в SET @cParamList = '' 'RASHODI' , ' VIRUCHKA ' ''
Я просто думаю, что есть какой-то inlist или что-то подобное, кто умеет сам парсировать.
8 авг 11, 18:55    [11087928]     Ответить | Цитировать Сообщить модератору
 Re: запрос со списком значений  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
Пашок
подстрокавстроке
пропущено...


такой вариант бесспорно будет быстрее


Не, не, так не сработает.

Задача по сути заключается как

SET @cParamList = 'RASHODI,VIRUCHKA'
преварить в SET @cParamList = '' 'RASHODI' , ' VIRUCHKA ' ''
Я просто думаю, что есть какой-то inlist или что-то подобное, кто умеет сам парсировать.

Вы в одну переменную два значения не всунете, они туда не влезут. А вот в табличку - легко. Распарсить по разделителям в табличку можно разными способами. Примеров на форуме уйма.
8 авг 11, 19:07    [11087970]     Ответить | Цитировать Сообщить модератору
 Re: запрос со списком значений  [new]
Пашок
Member

Откуда:
Сообщений: 287
kDnZP
Пашок
пропущено...


Не, не, так не сработает.

Задача по сути заключается как

SET @cParamList = 'RASHODI,VIRUCHKA'
преварить в SET @cParamList = '' 'RASHODI' , ' VIRUCHKA ' ''
Я просто думаю, что есть какой-то inlist или что-то подобное, кто умеет сам парсировать.

Вы в одну переменную два значения не всунете, они туда не влезут. А вот в табличку - легко. Распарсить по разделителям в табличку можно разными способами. Примеров на форуме уйма.



Ок, понятно, в табличку то я знаю как, спасибо.
8 авг 11, 19:10    [11087983]     Ответить | Цитировать Сообщить модератору
 Re: запрос со списком значений  [new]
подстрокавстроке
Guest
Пашок
подстрокавстроке
пропущено...


такой вариант бесспорно будет быстрее


Не, не, так не сработает.

Задача по сути заключается как

SET @cParamList = 'RASHODI,VIRUCHKA'
преварить в SET @cParamList = '' 'RASHODI' , ' VIRUCHKA ' ''
Я просто думаю, что есть какой-то inlist или что-то подобное, кто умеет сам парсировать.


вас не понятно.
почему не сработает? про "сам находить подстроку в строке" уже написал - это LIKE.
8 авг 11, 20:40    [11088209]     Ответить | Цитировать Сообщить модератору
 Re: запрос со списком значений  [new]
adv
Member

Откуда:
Сообщений: 3333
Пашок,

DECLARE @cParamList nvarchar(200)
SET @cParamList = 'RASHODI,VIRUCHKA'

select @cParamList do, '''' + replace(@cParamList, ',', ''', ''')+'''' posle
так надо?

8 авг 11, 21:08    [11088312]     Ответить | Цитировать Сообщить модератору
 Re: запрос со списком значений  [new]
kapelan
Member

Откуда: хутор БольшойБугор
Сообщений: 726
Пашок,

DECLARE   @xml XML

SELECT @xml = CONVERT(xml,'<root><s>' + REPLACE('RASHODI,VIRUCHKA',',','</s><s>') + '</s></root>')

SELECT T.c.value('.','varchar(50)')
FROM @xml.nodes('/root/s') T(c)

select * from accounts 
JOIN (SELECT T.c.value('.','varchar(50)')
      FROM @xml.nodes('/root/s') T(c)) 
 ON  ....
9 авг 11, 17:16    [11093189]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить