Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Фильтрация в хранимой процедуре  [new]
SDAG
Member

Откуда:
Сообщений: 27
Доброго времени суток. Имею хранимую процедуру где провожу фильтрацию данных

WHERE @ts = [ts] or @username = [username] or @ip = [ip] or @my_category = [my_category] or @my_name = [my_name] or @nm1_name = [nm1_name] or @param = [param] or @short_descr = [short_descr]


При вызове хранимой процедуры когда передаю один из параметров то фильтрация работает , а когда несколько то работает 1 фильтрация (т.к в логике у меня 'or' ) . Заменил на 'and' но не устраивает т.к придется передавать все параметры ,а мне нужно передавать лишь те по каким хочу отфильтровать.

Помогите пожалуйста написать логику правильно.
12 июн 13, 16:50    [14424939]     Ответить | Цитировать Сообщить модератору
 Re: Фильтрация в хранимой процедуре  [new]
X-Cite
Member

Откуда: Минск
Сообщений: 1758
SDAG
Доброго времени суток. Имею хранимую процедуру где провожу фильтрацию данных

WHERE @ts = [ts] or @username = [username] or @ip = [ip] or @my_category = [my_category] or @my_name = [my_name] or @nm1_name = [nm1_name] or @param = [param] or @short_descr = [short_descr]


При вызове хранимой процедуры когда передаю один из параметров то фильтрация работает , а когда несколько то работает 1 фильтрация (т.к в логике у меня 'or' ) . Заменил на 'and' но не устраивает т.к придется передавать все параметры ,а мне нужно передавать лишь те по каким хочу отфильтровать.

Помогите пожалуйста написать логику правильно.

WHERE @ts = [ts] or @username = [username] and @username IS NOT NULL or @ip = [ip] AND @ip IS NOT NULL

может так?
12 июн 13, 17:04    [14424963]     Ответить | Цитировать Сообщить модератору
 Re: Фильтрация в хранимой процедуре  [new]
SDAG
Member

Откуда:
Сообщений: 27
X-Cite,Спасибо за отзыв , к сожалению не помогло
12 июн 13, 17:09    [14424972]     Ответить | Цитировать Сообщить модератору
 Re: Фильтрация в хранимой процедуре  [new]
wergwergerwgewrgwrg
Guest
SDAG,

case when @ts is null then [ts] else @ts end = [ts]

and

case when @username is null then [username] else @username end = [username]

and

case when @ip is null then [ip] else @ip end = [ip]

and...
12 июн 13, 17:10    [14424978]     Ответить | Цитировать Сообщить модератору
 Re: Фильтрация в хранимой процедуре  [new]
rsr sgrgsdf
Guest
2012

coalesce(@ts,[ts]) = [ts] and coalesce(@username,[username])= [username] and coalesce(@ip,[ip]) = [ip] and coalesce(@my_category,[my_category]) = [my_category] and coalesce(@my_name,[my_name]) = [my_name] and coalesce(@nm1_name,[nm1_name]) = [nm1_name] and coalesce(@param,[param]) = [param] and coalesce(@short_descr,[short_descr]) = [short_descr]
12 июн 13, 17:18    [14424997]     Ответить | Цитировать Сообщить модератору
 Re: Фильтрация в хранимой процедуре  [new]
SDAG
Member

Откуда:
Сообщений: 27
wergwergerwgewrgwrg
SDAG,

case when @ts is null then [ts] else @ts end = [ts]

and

case when @username is null then [username] else @username end = [username]

and

case when @ip is null then [ip] else @ip end = [ip]

and...


не помогло . спасибо за ответ
12 июн 13, 17:20    [14425001]     Ответить | Цитировать Сообщить модератору
 Re: Фильтрация в хранимой процедуре  [new]
SDAG
Member

Откуда:
Сообщений: 27
rsr sgrgsdf
2012

coalesce(@ts,[ts]) = [ts] and coalesce(@username,[username])= [username] and coalesce(@ip,[ip]) = [ip] and coalesce(@my_category,[my_category]) = [my_category] and coalesce(@my_name,[my_name]) = [my_name] and coalesce(@nm1_name,[nm1_name]) = [nm1_name] and coalesce(@param,[param]) = [param] and coalesce(@short_descr,[short_descr]) = [short_descr]


не помогло . спасибо за ответ
12 июн 13, 17:24    [14425009]     Ответить | Цитировать Сообщить модератору
 Re: Фильтрация в хранимой процедуре  [new]
invm
Member

Откуда: Москва
Сообщений: 9402
https://www.sql.ru/faq/faq_topic.aspx?fid=114
12 июн 13, 17:34    [14425020]     Ответить | Цитировать Сообщить модератору
 Re: Фильтрация в хранимой процедуре  [new]
iap
Member

Откуда: Москва
Сообщений: 47000
X-Cite
WHERE @username = [username] and @username IS NOT NULL
может так?
Считаете, что если @username IS NULL,
то условие [username]=@username может быть истинным, да?
12 июн 13, 19:06    [14425156]     Ответить | Цитировать Сообщить модератору
 Re: Фильтрация в хранимой процедуре  [new]
SDAG
Member

Откуда:
Сообщений: 27
invm
https://www.sql.ru/faq/faq_topic.aspx?fid=114

Спасибо за отзыв.
Можете показать на моем примере ?

Я написал вот так :

WHERE [ts] = isnull(@ts,[ts]) and
      [username] = ISNULL(@username,[username]) and
      [ip] = ISNULL(@ip,[ip]) and
      [my_category] = ISNULL(@my_category,[my_category]) and 
      [my_name] = ISNULL(@my_name,[my_name]) and
      [nm1_name] = ISNULL(@nm1_name,[nm1_name]) and
      [param] = ISNULL(@param,[param]) and
      [short_descr] = ISNULL(@short_descr,[short_descr])


Но онo не работает
13 июн 13, 11:17    [14426963]     Ответить | Цитировать Сообщить модератору
 Re: Фильтрация в хранимой процедуре  [new]
iap
Member

Откуда: Москва
Сообщений: 47000
SDAG
invm
https://www.sql.ru/faq/faq_topic.aspx?fid=114

Спасибо за отзыв.
Можете показать на моем примере ?

Я написал вот так :

WHERE [ts] = isnull(@ts,[ts]) and
      [username] = ISNULL(@username,[username]) and
      [ip] = ISNULL(@ip,[ip]) and
      [my_category] = ISNULL(@my_category,[my_category]) and 
      [my_name] = ISNULL(@my_name,[my_name]) and
      [nm1_name] = ISNULL(@nm1_name,[nm1_name]) and
      [param] = ISNULL(@param,[param]) and
      [short_descr] = ISNULL(@short_descr,[short_descr])



Но онo не работает
Какие-либо из перечисленных полей могут принимать значение NULL?
Если да, то WHERE написано криво, ибо строки с нулловыми значениями отбрасывает.
13 июн 13, 11:21    [14427007]     Ответить | Цитировать Сообщить модератору
 Re: Фильтрация в хранимой процедуре  [new]
SDAG
Member

Откуда:
Сообщений: 27
iap
SDAG
пропущено...

Спасибо за отзыв.
Можете показать на моем примере ?

Я написал вот так :

WHERE [ts] = isnull(@ts,[ts]) and
      [username] = ISNULL(@username,[username]) and
      [ip] = ISNULL(@ip,[ip]) and
      [my_category] = ISNULL(@my_category,[my_category]) and 
      [my_name] = ISNULL(@my_name,[my_name]) and
      [nm1_name] = ISNULL(@nm1_name,[nm1_name]) and
      [param] = ISNULL(@param,[param]) and
      [short_descr] = ISNULL(@short_descr,[short_descr])


Но онo не работает
Какие-либо из перечисленных полей могут принимать значение NULL?
Если да, то WHERE написано криво, ибо строки с нулловыми значениями отбрасывает.

Нет не одно значение не может быть null . Я по факу хотел сделать https://www.sql.ru/faq/faq_topic.aspx?fid=114 .
Если вам не трудно можете помочь написать правильно логику ? Заранее спасибо
13 июн 13, 11:26    [14427044]     Ответить | Цитировать Сообщить модератору
 Re: Фильтрация в хранимой процедуре  [new]
iap
Member

Откуда: Москва
Сообщений: 47000
SDAG
Но онo не работает
Как тут можно помочь?
Ваша просьба абсурдна, начиная прямо с этого места.
13 июн 13, 11:30    [14427074]     Ответить | Цитировать Сообщить модератору
 Re: Фильтрация в хранимой процедуре  [new]
SDAG
Member

Откуда:
Сообщений: 27
iap
SDAG
Но онo не работает
Как тут можно помочь?
Ваша просьба абсурдна, начиная прямо с этого места.

Я имел в виду не эту логику . Как бы вы решили данную задачу которую я описал в первом посте ?
13 июн 13, 11:34    [14427100]     Ответить | Цитировать Сообщить модератору
 Re: Фильтрация в хранимой процедуре  [new]
iap
Member

Откуда: Москва
Сообщений: 47000
SDAG,

Вы бы сказали всё же, что означает загадочное "Но онo не работает"
13 июн 13, 11:41    [14427182]     Ответить | Цитировать Сообщить модератору
 Re: Фильтрация в хранимой процедуре  [new]
SDAG
Member

Откуда:
Сообщений: 27
Написал следующим способом и все работает , если кому-нибудь понадобится вот код :

WHERE (@ts IS NULL OR @ts = '' OR [ts] = @ts)
and (@username IS NULL OR @username  = '' OR [username] = @username)
and (@ip IS NULL OR @ip  = '' OR [ip] = @ip)
and (@my_category IS NULL OR @my_category = '' OR [my_category] = @my_category)
and (@my_name IS NULL OR @my_name = '' OR [my_name] = @my_name)
and (@nm1_name IS NULL OR @nm1_name  = '' OR [nm1_name] = @nm1_name)
and (@param IS NULL OR @param  = '' OR [param] = @param)
and (@short_descr IS NULL OR @short_descr = '' OR [short_descr] = @short_descr)
13 июн 13, 12:34    [14427598]     Ответить | Цитировать Сообщить модератору
 Re: Фильтрация в хранимой процедуре  [new]
ambarka_max
Member

Откуда: Россия
Сообщений: 517
Сомневаюсь что кому-нибудь понадобиться. Обычно люди проверяют на входе параметры.
13 июн 13, 15:28    [14429088]     Ответить | Цитировать Сообщить модератору
 Re: Фильтрация в хранимой процедуре  [new]
SHok_by
Member

Откуда: Minsk
Сообщений: 51
Динамик SQL ?
не ?
13 июн 13, 16:12    [14429414]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить