Nie ma potrzeby posiadania kolumny obliczeniowej, aby „przeszukać tabelę” w celu znalezienia wierszy pasujących do jednego roku. Napisz klauzulę where, używając zamiast tego interwału i umieść indeks w kolumnie daty.
select SomeColumn
from YourTable
where ActivityDate >= '20110101' and
ActivityDate < '20120101'
Jeśli chcesz użyć int (rok) jako argumentu do zapytania zamiast dwóch ciągów, możesz użyć dateadd
. Upewnij się tylko, że nie stosujesz żadnych funkcji/manipulacji do kolumny ActivityDate, ponieważ SQL Server nie będzie w stanie użyć indeksu, jeśli to zrobisz.
declare @Year int = 2011
select SomeColumn
from YourTable
where ActivityDate >= dateadd(year, @Year-1900, 0) and
ActivityDate < dateadd(year, @Year-1899, 0)