What I do in these scenarios is change the default for @ProductId
to -1
DO NOT SEND ANY VALUE FOR THE PARAMETER, IF YOU SEND A NULL THEN IT WILL USE THAT VALUE. DEFAULT VALUES ARE ONLY USED WHEN THE PARAMETER IS NOT SENT.
@ProductID int = -1,
@CollectionID int = NULL,
@ApplicationID int = NULL,
@StyleID int = NULL
WHERE (@ProductID = -1 OR dbo.CrossoverDesignTable.ProductID = @ProductID)
AND .....