Более простой способ - использовать ISNULL
where
Name like '%Hasbro%'
and ProductID = ISNULL(@ProductID, ProductID)
Таким образом, если @ProductID
опущено (т. Е. В вызове хранимой процедуры NULL
), вы возвращаетесь к исходному значению, и по существу оно уменьшается до WHERE Name like '%Hasbro%' and ProductID = ProductID
- вторая часть всегда будет правдой.
Хотя в соответствии с кодом, который вы опубликовали, сейчас это вообще не хранимая процедура. Просто чтобы вы знали, что у вас нет DECLARE
таких параметров в SQL Server, объявление вашей хранимой процедуры будет выглядеть так:
CREATE PROCEDURE [dbo].[YourStoredProcName]
@ProductID = NULL
AS
BEGIN
-- stuff goes here
END
И затем, если хранимая процедура вызывается как просто EXEC YourStoredProcName
, тогда @ProductID
будет NULL
, и этот вызов ISNULL()
сработает.
<ч />
edit : за исключением того, что это не будет работать для обнуляемого столбца, что в данном случае, очевидно, так и есть. Для любого необнуляемого столбца это, вероятно, самое простое решение.