Вы можете включить это в один запрос:
Select Id
from MyTable
where ProductionYear >= @startDate and
(ProductionYear <= @endDate or @endDate = 0);
Ваши два запроса не согласуются с тем, включен ли @startDate
.BETWEEN
содержит значения сравнения, но >
- нет.
Если вы хотите, чтобы @startDate
также был необязательным:
Select Id
from MyTable
where (ProductionYear >= @startDate or @startDate = 0) and
(ProductionYear <= @endDate or @endDate = 0);
Некоторые дополнительные комментарии.Называть «год» «датой» непонятно.Ваши параметры, вероятно, должны называться @startYear
и @endYear
.
Эти запросы приведут к полному сканированию таблицы вашей таблицы.Это, вероятно, не имеет большого значения, потому что гранулярность по годам.Если детализация была более точной, вы можете использовать индекс.В этом случае, возможно, лучший подход - это динамический SQL.