Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2008.07.06;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.044 c
15-1211296737
buzb
2008-05-20 19:18
2008.07.06
Посоветуйте C++ компилятор.


2-1212846624
WebSQLNeederrr
2008-06-07 17:50
2008.07.06
Как узнать следующее вхождение pos-a


9-1172040240
Cerberus
2007-02-21 09:44
2008.07.06
Вопрос XProger у по его сетевому модулю.


15-1211486281
BlueDragon
2008-05-22 23:58
2008.07.06
Задание с ЕГЭ 2008


6-1189759827
horny
2007-09-14 12:50
2008.07.06
Share - ресурсы





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский