Необязательные параметры в хранимой процедуре в SQL Server

Я новичок в переполнении стека, а также хранимых процедур. Я хотел бы настроить процедуру, чтобы включить три дополнительных параметра и три зависимых параметра. Если пользователь не предоставляет эти необязательные параметры, то набор результатов будет возвращать все возможные данные с учетом трех зависимых.

На мой взгляд, это выглядит примерно так:

@Color1,--optional   
@Color2,--optional    
@Color3,--optional    
@Date,--dependent    
@Item,--dependent    
@Price--dependent    

IF @Color1 IS NULL OR @Color2 IS NULL OR @Color3 IS NULL    
THEN 
    EXEC (SELECT * 
          WHERE 
              Date = @Date AND 
              Item = @Item AND 
              Price = @Price)
ELSE 
    EXEC (SELECT * 
          WHERE 
              Color1 = @Color1 AND
              Color2 = @Color2 AND
              Color3 = @Color3 AND
              Date = @Date AND 
              Item = @Item AND 
              Price = @Price)

но я все еще учусь Заранее благодарю за любую помощь

1 ответ

Решение

Прежде всего вы должны предоставить значения параметров по умолчанию, а затем сравнить их со значениями столбцов или с нулем:

create procedure somename
@p1 int,
@p2 int = null,
@p3 int = null
as
begin

    select * from sometable
    where col1 = @p1 and
          (col2 = @p2 or @p2 is null) and
          (col3 = @p3 or @p3 is null)

end

Затем вы можете вызвать процесс как:

exec somename @p1 = 1
exec somename @p1 = 1, @p2 = 2
exec somename @p1 = 1, @p2 = 2, @p3 = 3

И это будет работать, как вы ожидаете. С вашим подходом вам действительно нужно 2^NIF проверяет где N количество таких параметров Представьте, что для 5 параметров вам нужно будет сделать 2^5 = 32IF чеки. С предоставленным подходом у вас будет все в одном запросе и только 5 проверок.

Другие вопросы по тегам