Это работает во многих случаях (несмотря на то, что в комментариях будет сказано, не пытаясь это сделать), потому что оптимизатор будет игнорировать бит ISNULL. Работает только для ненулевых столбцов
SELECT @site = NULLIF(@site, -1) ...
SELECT * from table
WHERE site = ISNULL(@site, site) ..
В противном случае, условно ГДЕ, что обычно плохо, потому что ИЛИ не может быть оптимизировано
SELECT * from table
WHERE (@site = -1 OR site = @site) AND (...
Или отдельные хранимые процедуры (не думаю, что вы тоже этого хотите)
Или используйте sp_executesql (избегает динамического SQL)