Необязательные параметры в хранимой процедуре в 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^N
IF
проверяет где N
количество таких параметров Представьте, что для 5 параметров вам нужно будет сделать 2^5 = 32
IF
чеки. С предоставленным подходом у вас будет все в одном запросе и только 5 проверок.