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

Откуда:
Сообщений: 19
Добрый день!
Подскажите плиз, есть запрос
ALTER procedure [dbo].[P_spGetFind]
(
@Sex tinyint=null,
@House varchar(10)=null,
@Flat  varchar(10)=null,
@Inn varchar(20)=null,
@LName varchar(60)=null,
@FName varchar(60)=null,
@MName varchar(60)=null
) as set nocount on
		if len(@Sex) = 0 
			set @Sex = null 

    begin
	if (@House is null)
	select  top 100  P.*  from P_person P 
	where 
		  (@Sex is null or P.Sex_ID=@Sex) and
		  (@Inn is null or P.Soc_ID like @Inn) and
		  (@LName is null or P.LAST_NAME like @LName) and
		  (@FName is null or P.First_NAME like @FName) and
		  (@MName is null or P.MID_NAME like @MName) and
		  (P.end_date is null)
  end

запрос почему-то иногда не находит строк, которые существует в базе?
15 май 17, 15:03    [20482074]     Ответить | Цитировать Сообщить модератору
 Re: Не понятный запрос  [new]
uaggster
Member

Откуда:
Сообщений: 827
miru, Потому, что в некоторых полях - Null.
А сравнение с Null - дает Null.
... и это, как ты понимаешь, не ИСТИНА.
15 май 17, 15:05    [20482085]     Ответить | Цитировать Сообщить модератору
 Re: Не понятный запрос  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36980
Подскажите плиз.
У меня есть ключ от машины, но почему-то иногда от него машина не заводится, хотя должна.
15 май 17, 15:10    [20482107]     Ответить | Цитировать Сообщить модератору
 Re: Не понятный запрос  [new]
uaggster
Member

Откуда:
Сообщений: 827
Гавриленко Сергей Алексеевич
Подскажите плиз.
У меня есть ключ от машины, но почему-то иногда от него машина не заводится, хотя должна.

Наиболее вероятные причины: нет бензина или сел аккумулятор :-)
15 май 17, 15:17    [20482125]     Ответить | Цитировать Сообщить модератору
 Re: Не понятный запрос  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
uaggster,

автор
miru, Потому, что в некоторых полях - Null.
А сравнение с Null - дает Null.
... и это, как ты понимаешь, не ИСТИНА.

и чё?

автор
@Sex tinyint=null,

if len(@Sex) = 0
set @Sex = null

странновато

по вашим условиям достаточно жёстко надо передавать параметры
15 май 17, 15:37    [20482194]     Ответить | Цитировать Сообщить модератору
 Re: Не понятный запрос  [new]
iiyama
Member

Откуда:
Сообщений: 642
TaPaK,

там не странновато, а бессмысленно
выражение if len(@Sex) = 0 set @Sex = null, при @Sex tinyint никогда не выполняется

Хрустальный шар показывает, что у аффтора пропадают из итоговой выборки строки, где значения полей таблицы P_person IS NULL,
ИМХО автор хочет
select  top 100  P.*  from P_person P 
	where 
		  (P.Sex_ID=COALESCE(@Sex, P.Sex_ID)  OR P.Sex_ID IS NULL) and ...
15 май 17, 16:12    [20482319]     Ответить | Цитировать Сообщить модератору
 Re: Не понятный запрос  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
iiyama,

вы бредите
15 май 17, 16:23    [20482347]     Ответить | Цитировать Сообщить модератору
 Re: Не понятный запрос  [new]
iiyama
Member

Откуда:
Сообщений: 642
TaPaK,
re> бредите
вполне может быть, уточните в чем конкретно, к вечеру голова никакая, может где-то и ляпнул не то?
15 май 17, 16:48    [20482417]     Ответить | Цитировать Сообщить модератору
 Re: Не понятный запрос  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
iiyama
TaPaK,
re> бредите
вполне может быть, уточните в чем конкретно, к вечеру голова никакая, может где-то и ляпнул не то?


чем
(P.Sex_ID=COALESCE(@Sex, P.Sex_ID) OR P.Sex_ID IS NULL)
лучше чем
(@Sex is null or P.Sex_ID=@Sex)
тем более если мы ищем конкретный секс, а вы пишете, что нате вам и другие
15 май 17, 16:53    [20482435]     Ответить | Цитировать Сообщить модератору
 Re: Не понятный запрос  [new]
iiyama
Member

Откуда:
Сообщений: 642
TaPaK,

Вы правы
15 май 17, 17:03    [20482466]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить