Der er ingen grund til at have en beregnet kolonne for at "søge en tabel" efter rækker, der matcher et år. Skriv dig hvor-sætning ved at bruge et interval i stedet for, og hav et indeks på din datokolonne.
select SomeColumn
from YourTable
where ActivityDate >= '20110101' and
ActivityDate < '20120101'
Hvis du vil bruge en int (år) som argument til forespørgslen i stedet for to strenge, kan du bruge dateadd
. Bare sørg for, at du ikke anvender nogen funktioner/manipulationer på kolonnen ActivityDate, fordi SQL Server ikke vil være i stand til at bruge indekset, hvis du gør det.
declare @Year int = 2011
select SomeColumn
from YourTable
where ActivityDate >= dateadd(year, @Year-1900, 0) and
ActivityDate < dateadd(year, @Year-1899, 0)