Лучшей практикой будет процедура с кодом, которая позволяет иметь аргумент NULL. Динамический SQL может быть внедрен, если он выполняется плохо, или его сложно поддерживать, если у вас есть условные ветви для добавления дополнительных объединений, предложений в WHERE и т. Д.
CREATE PROCEDURE your_proc
@search_date DATETIME
AS
BEGIN
SELECT *
FROM your_table
WHERE your_date_col >= ISNULL(@search_date, '9999-12-31')
END
GO
Теперь, если у вас есть переменная, вы можете вызвать вашу процедуру с ней:
DECLARE @variable DATETIME = '2018-01-01'
EXEC your_proc @variable
Или вы можете оставить его NULL и запустить тот же код:
EXEC your_proc NULL