Текущий архив: 2008.07.06;
Скачать: CL | DM;
Вниз
MSSQL инструкция IN Найти похожие ветки
← →
IntruderLab (2008-01-23 15:53) [0]Доброго дня, коллеги! Вопрос собственно такой, есть процедура, следующего типа
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 ждет перечисления через "," и выдает ошибку, как быть
← →
IntruderLab (2008-01-23 15:57) [1]Собственно есть мысль, чтобы передавать строку без пробелов и уже в скрипте вставлять "," но вот тогда вопрос как
← →
KSergey © (2008-01-23 16:01) [2]не, IN - оно не понимает подстановок в виде строки.
Варианты?
Либо динамиечски формировать весь текст запроса и потом выполнять через exec(), либо создавать временную таблицу (можно которые с # имена начинаются, почитать), в нее запихивать нужное кол-во строк с нужными значениями - и с ней INNER JOIN.
← →
IntruderLab (2008-01-23 16:24) [3]Ладно буду пробовать, если есть еще идеи выкладывайте,
KSergey - благодарю...
← →
IntruderLab (2008-01-23 16:52) [4]Свершилось, пришлось делать через exec()
← →
User_Name (2008-01-23 20:04) [5]Динамический SQL - зло. Правильнее делать через временную таблицу
← →
ANB © (2008-01-24 13:35) [6]А аналога ИнСтр (Поз в делфи) разве нету в МС СКЛ ?
В оракле часто юзаем, если табличка не очень здоровая.
← →
clickmaker © (2008-01-24 13:40) [7]
> А аналога ИнСтр (Поз в делфи) разве нету в МС СКЛ ?
charindex
← →
sniknik © (2008-01-24 14:11) [8]> разве нету в МС СКЛ ?
аналог CHARINDEX, но это всетаки строковая операция, а не "есть ли в перечисленном".
← →
ANB © (2008-01-24 15:50) [9]
> но это всетаки строковая операция, а не "есть ли в перечисленном"
а не один ли фиг, если работает ?
← →
sniknik © (2008-01-24 17:00) [10]> а не один ли фиг, если работает ?
не один, об этом надо помнить когда условие задаешь
к примеру
CHARINDEX("2", "20,12,15,23") > 0
не одно и тоже, для перечисляемого варианта если бы был, т.е. функции аналога
"2" IN ("20","12","15","23") - допустим что в нашей гипотетической функции перечисляемые элементы задавались бы в строке как с CHARINDEX.
разные результаты будут.
но если помнить, и немного "изгольнуться" то можно привести к тому же самому.
← →
ANB © (2008-01-24 17:06) [11]CHARINDEX(",2,", ",20,12,15,23,") > 0
практически полный аналог ина. тока медленнее будет, т.к. индекс не используется.
← →
sniknik © (2008-01-24 17:14) [12]ну вот, я про то же, только первая запятая лишняя
CHARINDEX("2,", "20,12,15,23,") > 0
будет чуток побыстрее ;)
← →
ANB © (2008-01-24 17:22) [13]CHARINDEX("2,", "20,12,15,23,22,") > 0 - даст некорректный результат. так что не лишняя :)
← →
sniknik © (2008-01-24 17:39) [14]точно
← →
ANB © (2008-01-24 17:43) [15]
> sniknik © (24.01.08 17:39) [14]
> точно
Опыт не пропьешь :)
Страницы: 1 вся ветка
Текущий архив: 2008.07.06;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.039 c