Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

MSSQL инструкция IN [D7, MSSQL]


IntruderLab ©   (2008-01-23 15:53:00) 

Доброго дня, коллеги! Вопрос собственно такой, есть процедура, следующего типа

create procedure blabla(
  @begin datetime,
  @end   datetime,
  @type nvarchar(100))
as
  select a.Code from Clients a
  where a.Date >= @begin and a.Date <= @end
  and a.Type in (@type)

Собственно сабж- понятно что @type должно быть строковым, например "17,28,54", естественно in ждет перечисления через "," и выдает ошибку, как быть


ANB   (2008-01-24 17:43:00) [1]


> sniknik ©   (24.01.08 17:39) [14]
> точно

Опыт не пропьешь :)


sniknik   (2008-01-24 17:39:00) [2]

точно


ANB   (2008-01-24 17:22:00) [3]

CHARINDEX("2,", "20,12,15,23,22,") > 0 - даст некорректный результат. так что не лишняя :)


sniknik   (2008-01-24 17:14:00) [4]

ну вот, я про то же, только первая запятая лишняя
CHARINDEX("2,", "20,12,15,23,") > 0
будет чуток побыстрее ;)


ANB   (2008-01-24 17:06:00) [5]

CHARINDEX(",2,", ",20,12,15,23,") > 0

практически полный аналог ина. тока медленнее будет, т.к. индекс не используется.


sniknik   (2008-01-24 17:00:00) [6]

> а не один ли фиг, если работает ?
не один, об этом надо помнить когда условие задаешь
к примеру
CHARINDEX("2", "20,12,15,23") > 0
не одно и тоже, для перечисляемого варианта если бы был, т.е. функции аналога
"2" IN ("20","12","15","23") - допустим что в нашей гипотетической функции перечисляемые элементы задавались бы в строке как с CHARINDEX.
разные результаты будут.
но если помнить, и немного "изгольнуться" то можно привести к тому же самому.


ANB   (2008-01-24 15:50:00) [7]


> но это всетаки строковая операция, а не "есть ли в перечисленном"

а не один ли фиг, если работает ?


sniknik   (2008-01-24 14:11:00) [8]

> разве нету в МС СКЛ ?
аналог CHARINDEX, но это всетаки строковая операция, а не "есть ли в перечисленном".


clickmaker   (2008-01-24 13:40:00) [9]


> А аналога ИнСтр (Поз в делфи) разве нету в МС СКЛ ?

charindex


ANB   (2008-01-24 13:35:00) [10]

А аналога ИнСтр (Поз в делфи) разве нету в МС СКЛ ?
В оракле часто юзаем, если табличка не очень здоровая.


User_Name   (2008-01-23 20:04:00) [11]

Динамический SQL - зло. Правильнее делать через временную таблицу


IntruderLab   (2008-01-23 16:52:00) [12]

Свершилось, пришлось делать через exec()


IntruderLab   (2008-01-23 16:24:00) [13]

Ладно буду пробовать, если есть еще идеи выкладывайте,
KSergey - благодарю...


KSergey   (2008-01-23 16:01:00) [14]

не, IN - оно не понимает подстановок в виде строки.
Варианты?
Либо динамиечски формировать весь текст запроса и потом выполнять через exec(), либо создавать временную таблицу (можно которые с # имена начинаются, почитать), в нее запихивать нужное кол-во строк с нужными значениями - и с ней INNER JOIN.


IntruderLab   (2008-01-23 15:57:00) [15]

Собственно есть мысль, чтобы передавать строку без пробелов и уже в скрипте вставлять "," но вот тогда вопрос как


Наверх

Титульная страница Поиск, карта сайта Написать письмо