Обычно вы обрабатываете это с помощью логической логики в вашем SQL. Так что вы можете просто написать:
WHERE StartDate = @reportMonth
AND..
AND ...
AND (@siteId <=0 OR sites.SiteId = @siteId)
Таким образом, если @siteId
не больше 0, он игнорирует остальную часть предложения OR
, но если это так, то он оценивает ваше предложение sites.SiteId
. Обычно для хранимого процесса я устанавливаю значение по умолчанию на ноль и проверяю на ноль:
CREATE PROCEDURE [dbo].[usp_GetStatus]
@siteId INT = NULL,
........
from sites;
WHERE StartDate = @reportMonth
AND..
AND ...
AND (@siteId IS NULL OR sites.SiteId = @siteId)