Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.49 MB
Время: 0.021 c
2-1213015398
tytus
2008-06-09 16:43
2008.07.06
Как в TIdTelnet передать несколько комманд?


3-1201092826
IntruderLab
2008-01-23 15:53
2008.07.06
MSSQL инструкция IN


2-1212662430
TBase_Tree
2008-06-05 14:40
2008.07.06
Хук не работает, подскажите в чем дело ...


2-1212427460
WebSQLNeederr
2008-06-02 21:24
2008.07.06
Помогите с алгоритмом


2-1212931251
S.[ace]
2008-06-08 17:20
2008.07.06
Заполнение StringGrid