Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.06.2013, 08:10   #1
Benderz
Новичок
Джуниор
 
Регистрация: 27.06.2013
Сообщений: 3
По умолчанию Запрос в MSSQL

Подскажите кто-нибудь, как пользоваться конструкцией if else в mssql. Нужно сделать вариативную выборку в зависимости от параметров т.е. есть метод созданный через tableadapter и чтоб не писать новый метод для каждой выборки можно как-то сделать различные результаты в зависимости от параметров (нулевых переменных). Т.е. допустим запрос:

SELECT id FROM table WHERE (paramert1=@parametr1) AND (parametr2=@parametr2)

Нужно сделать запрос что-то типо

SELECT id FROM table WHERE id in (if @parametr1='' then select id from table else select id from table where parametr1=@parametr) AND (parametr2=@parametr2)
Можно ли так делать вообще или может быть есть какие-то другие способы извлечения из бд с помощью одного метода, но с различными параметрами (допустим если 0, то все данные независимо от этого параметра, если параметр >0 то учитывая его значение)
Benderz вне форума Ответить с цитированием
Старый 27.06.2013, 08:28   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

IF внешняя команда по отношению к SELECT. И использовать можно в таком духе:
Код:
IF тра-ля-ля1 SELECT ...
ELSE IF тра-ля-ля2 SELECT ...
...
ELSE SELECT ...
Или использовать конструкцию CASE WHEN в самом запросе
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 27.06.2013, 08:31   #3
Benderz
Новичок
Джуниор
 
Регистрация: 27.06.2013
Сообщений: 3
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
IF внешняя команда по отношению к SELECT. И использовать можно в таком духе:
Код:
IF тра-ля-ля1 SELECT ...
ELSE IF тра-ля-ля2 SELECT ...
...
ELSE SELECT ...
Или использовать конструкцию CASE WHEN в самом запросе
Читал про case, но так и не понял как его использовать можно в данной ситуации. Я думаю когда люди делают разнообразные выборки из бд с разными параметрами, то они не пишут метод под каждый запрос, есть наверно какой-то более простой способ.. Меня это в мысле о запросе привело, но как сюда все это привязать незнаю
Benderz вне форума Ответить с цитированием
Старый 27.06.2013, 08:39   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Я думаю когда люди делают разнообразные выборки из бд с разными параметрами, то они не пишут метод под каждый запрос, есть наверно какой-то более простой способ
В таких случаях я программно формирую условие выборки. Если пару-три десятка возможных параметров выборки, которые используются в разных сочетаниях, то или программно, или процедуру сделать. Есть варианты в самом запросе анализировать значение параметра типа @Parm1=0 OR Pole1=@Parm1. Последнее не использую, поскольку все эти OR-ы совсем не способствуют быстроте выполнения запроса. Да и если список возвращаемых полей разный, то как раз и делают разные запросы, а не совмещают в кучу не совместимое
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 27.06.2013 в 08:42.
Аватар вне форума Ответить с цитированием
Старый 27.06.2013, 08:57   #5
Benderz
Новичок
Джуниор
 
Регистрация: 27.06.2013
Сообщений: 3
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
В таких случаях я программно формирую условие выборки. Если пару-три десятка возможных параметров выборки, которые используются в разных сочетаниях, то или программно, или процедуру сделать. Есть варианты в самом запросе анализировать значение параметра типа @Parm1=0 OR Pole1=@Parm1. Последнее не использую, поскольку все эти OR-ы совсем не способствуют быстроте выполнения запроса. Да и если список возвращаемых полей разный, то как раз и делают разные запросы, а не совмещают в кучу не совместимое
http://www.sql.ru/faq/faq_topic.aspx?fid=114 вот на sql'е кинули ссылку, вроде то что надо. Правда тоже немного за производительность беспокоюсь, база маленькая (хотя как маленькая, со временем до тысяч 500 строк дойдет)...
А данные как раз всегда одинаковые возвращаются, разные параметры (не всегда все корректно задаются, часто пропуски и надо с ними бороться.
Спасибо за помощь, буду еще что-нибудь думать или тот вариант оставлю.
Вопрос еще, если реально база разрастется со временем, то может лучше в самой программе определять т.к. софт на слабом пк будет работать


Ох жесть надо мне спать больше, а то 3 часа сна видимо сильно сказываются.
SELECT * from table WHERE (@param=0 or param=@param) AND (@param2=0 or param2=@param)

Последний раз редактировалось Benderz; 27.06.2013 в 09:20.
Benderz вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запрос - фильтрация mssql ins813 БД в Delphi 5 05.10.2012 13:41
MsSql добавление параметров в запрос Claster Помощь студентам 10 09.08.2012 12:45
MSSQL Xe-Xe SQL, базы данных 4 31.10.2011 15:39
C# + MSSQL dampirik Базы данных (ADO.NET, LinqToSql, ORM Entity Framework, NHibernate) 3 17.12.2009 01:40
mssql + с# dampirik SQL, базы данных 1 14.12.2009 19:03