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

Откуда:
Сообщений: 56
Привет Всем,
пожалуйста помогите с тупым вопросом.
Например есть квери:

declare @Papa varchar (10)
set @Papa = 'Vasja'

select * from Semya where PapaName = @Papa


Вопрос в том как мне выбрать всех папа если сета нет?

пробовал так, не хорошо:

declare @Papa varchar (10)
--set @Papa = 'Vasja'

select * from dbo.Semya where PapaName = (@Papa,0)


Заранее спасибо!
25 сен 14, 00:12    [16618699]     Ответить | Цитировать Сообщить модератору
 Re: Parameter or All in SQL statement  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31778
Ckey,

select * from dbo.Semya where PapaName = isnull(@Papa,PapaName)
25 сен 14, 00:27    [16618726]     Ответить | Цитировать Сообщить модератору
 Re: Parameter or All in SQL statement  [new]
aleks2
Guest
alexeyvg
Ckey,

select * from dbo.Semya where PapaName = isnull(@Papa,PapaName)


Идеологически порочное условие.

Надо так
select * from dbo.Semya where @Papa is null or PapaName =  @Papa -- так хоть понятнее
-- или
select * from dbo.Semya where PapaName =  @Papa -- а так еще и быстрее
union all
select * from dbo.Semya where @Papa is null
25 сен 14, 05:12    [16618928]     Ответить | Цитировать Сообщить модератору
 Re: Parameter or All in SQL statement  [new]
iap
Member

Откуда: Москва
Сообщений: 47045
aleks2
alexeyvg
Ckey,

select * from dbo.Semya where PapaName = isnull(@Papa,PapaName)


Идеологически порочное условие.

Надо так
select * from dbo.Semya where @Papa is null or PapaName =  @Papa -- так хоть понятнее
-- или
select * from dbo.Semya where PapaName =  @Papa -- а так еще и быстрее
union all
select * from dbo.Semya where @Papa is null
А так прикольно :
SELECT * FROM dbo.Semya WHERE PapaName = ALL (SELECT @Papa WHERE @Papa IS NOT NULL);
25 сен 14, 09:17    [16619177]     Ответить | Цитировать Сообщить модератору
 Re: Parameter or All in SQL statement  [new]
aleks2
Guest
iap

[/src]
А так прикольно :
SELECT * FROM dbo.Semya WHERE PapaName = ALL (SELECT @Papa WHERE @Papa IS NOT NULL);
[/quot]

Забавный прикол.
А как там с использованием индексов на dbo.Semya.PapaName будет?
Ибо если с индексами будет хорошо - прикол имеет практический смысл.
Только "понятность" подкачала, ну да это дело привычки.
25 сен 14, 11:37    [16620092]     Ответить | Цитировать Сообщить модератору
 Re: Parameter or All in SQL statement  [new]
iap
Member

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

с производительностью, кажется не очень.
По поводу понятности. Я впервые об этом узнал тут
Там daw приводит ссылку на ещё более раннее обсуждение 2005 года.
25 сен 14, 11:59    [16620276]     Ответить | Цитировать Сообщить модератору
 Re: Parameter or All in SQL statement  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
iap
WHERE PapaName = ALL 

а так че-то не так прикольна
25 сен 14, 14:50    [16621392]     Ответить | Цитировать Сообщить модератору
 Re: Parameter or All in SQL statement  [new]
Shakill
Member

Откуда: мск
Сообщений: 1882
Ckey,

еще вариант без union all
но насчет значения верхней границы не уверен
select * from Semya where PapaName between isnull(@Papa, '') and isnull(@Papa, replicate(0xFF, 8000))
25 сен 14, 15:57    [16621772]     Ответить | Цитировать Сообщить модератору
 Re: Parameter or All in SQL statement  [new]
mittagswind
Member

Откуда:
Сообщений: 124
Shakill, использование таких функций в условиях отметает возможность использования индексов.

"За изобретение ставлю пять, а по предмету – неуд" (с) Приключения Шурика
25 сен 14, 16:13    [16621872]     Ответить | Цитировать Сообщить модератору
 Re: Parameter or All in SQL statement  [new]
Shakill
Member

Откуда: мск
Сообщений: 1882
mittagswind
Shakill, использование таких функций в условиях отметает возможность использования индексов.


неправда ваша. границы получаются константами и индекс работает, в этом и весь смысл
25 сен 14, 16:27    [16621934]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить