Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
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] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31778 |
Ckey, select * from dbo.Semya where PapaName = isnull(@Papa,PapaName) |
25 сен 14, 00:27 [16618726] Ответить | Цитировать Сообщить модератору |
aleks2
Guest |
Идеологически порочное условие. Надо так 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] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47045 |
![]() SELECT * FROM dbo.Semya WHERE PapaName = ALL (SELECT @Papa WHERE @Papa IS NOT NULL); |
||||
25 сен 14, 09:17 [16619177] Ответить | Цитировать Сообщить модератору |
aleks2
Guest |
![]() SELECT * FROM dbo.Semya WHERE PapaName = ALL (SELECT @Papa WHERE @Papa IS NOT NULL);[/quot] Забавный прикол. А как там с использованием индексов на dbo.Semya.PapaName будет? Ибо если с индексами будет хорошо - прикол имеет практический смысл. Только "понятность" подкачала, ну да это дело привычки. |
||
25 сен 14, 11:37 [16620092] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47045 |
aleks2, с производительностью, кажется не очень. По поводу понятности. Я впервые об этом узнал тут Там daw приводит ссылку на ещё более раннее обсуждение 2005 года. |
25 сен 14, 11:59 [16620276] Ответить | Цитировать Сообщить модератору |
Maxx Member [скрыт] Откуда: Сообщений: 24290 |
а так че-то не так прикольна ![]() |
||
25 сен 14, 14:50 [16621392] Ответить | Цитировать Сообщить модератору |
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] Ответить | Цитировать Сообщить модератору |
mittagswind Member Откуда: Сообщений: 124 |
Shakill, использование таких функций в условиях отметает возможность использования индексов. "За изобретение ставлю пять, а по предмету – неуд" (с) Приключения Шурика ![]() |
25 сен 14, 16:13 [16621872] Ответить | Цитировать Сообщить модератору |
Shakill Member Откуда: мск Сообщений: 1882 |
неправда ваша. границы получаются константами и индекс работает, в этом и весь смысл |
||
25 сен 14, 16:27 [16621934] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |