Sql Procedure
От: Аноним  
Дата: 09.04.11 12:25
Оценка:
Помогите написать процедуру:

Представьте например таблицу ID,Firstname,Lastname

Нужно написать процедуру с тремя параметрами (@Firstname,@Lastname,@Age)
Так чтобы они не зависели и в ето же время зависели бы друг от друга...

Привожу пример :

EXEC MyProcedure 'BlahBlah','BlahBlah','BlahBlah' <--- Выведит все поля
EXEC MyProcedure 'BlahBlah','BlahBlah','20' <--- Выведит все поля где Age = 20
EXEC MyProcedure 'BlahBlah', 'Ivanov','20' <--- Выведит все поля где Lastname = 'Ivanov' И Age = 20
EXEC MyProcedure 'Ivan','Ivanov','20' <--- Выведит все поля где Firstname = 'Ivan' И Lastname = 'Ivanov' И Age = 20
Re: Sql Procedure
От: baranovda Российская Империя  
Дата: 09.04.11 13:35
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Помогите написать процедуру:


create procedure foo(@firstName, @lastName, @age) as
begin
  select * from dbo.people
  where firstname like '%' + isnull(@firstname, firstname) + '%'
  and lastname like '%' + isnull(@lastname, lastname) + '%'
  and age = isnull(@age, age) 
end
Re[2]: Sql Procedure
От: divergo  
Дата: 10.04.11 11:53
Оценка:
B>
B>create procedure foo(@firstName, @lastName, @age) as
B>begin
B>  select * from dbo.people
B>  where firstname like '%' + isnull(@firstname, firstname) + '%'
B>  and lastname like '%' + isnull(@lastname, lastname) + '%'
B>  and age = isnull(@age, age) 
B>end
B>


Вот так будет оптимальнее:
(@firstname IS NULL OR firstname LIKE '%' + @firstname + '%')
Re[3]: Sql Procedure
От: Lloyd Россия  
Дата: 10.04.11 13:53
Оценка:
Здравствуйте, divergo, Вы писали:

D>Вот так будет оптимальнее:

D>
D>(@firstname IS NULL OR firstname LIKE '%' + @firstname + '%')
D>


С какой стати это будет оптимальнее?
Re[3]: Sql Procedure
От: baranovda Российская Империя  
Дата: 10.04.11 17:25
Оценка:
Здравствуйте, divergo, Вы писали:

D>Вот так будет оптимальнее:

D>
D>(@firstname IS NULL OR firstname LIKE '%' + @firstname + '%')
D>


Академичность решения оставим за кадром.

Можно ведь исчо и динамический sql слепить
Или так склеить:

...
and
  case 
    when @firstname is null then 1
    when firstname like @firstname then 1
    else 0
  end = 1
and
  case
    when @age is null then 1
    when age = @age then 1
    else 0
  end = 1
  ...
Re[4]: Sql Procedure
От: divergo  
Дата: 11.04.11 04:14
Оценка:
B>Академичность решения оставим за кадром.
Ну оно незначительно быстрее работает.
Если же там этих лайков с десяток, то профит будет ощутимый.
+
В варианте

firstname like '%' + isnull(@firstname, firstname) + '%'

firstname будет NULL, то запись не выберется.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.