![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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]Собственно есть мысль, чтобы передавать строку без пробелов и уже в скрипте вставлять "," но вот тогда вопрос как