Главная страница
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.018 c
2-1212689027
samael6
2008-06-05 22:03
2008.07.06
ReAlign


15-1211271685
kla$1
2008-05-20 12:21
2008.07.06
Microsoft SQL Server 2000


2-1212608338
kami
2008-06-04 23:38
2008.07.06
Как организовать одновременное чтение из COM-порта


3-1201600224
dest81
2008-01-29 12:50
2008.07.06
FireBird неповторяющиеся записи


2-1213005331
Zabludshiy
2008-06-09 13:55
2008.07.06
Проблема с выполнением запроса в ADOquery