Det finns inget behov av att ha en beräknad kolumn för att "söka i en tabell" efter rader som matchar ett år. Skriv din where-sats med ett intervall istället och ha ett index på din datumkolumn.
select SomeColumn
from YourTable
where ActivityDate >= '20110101' and
ActivityDate < '20120101'
Om du vill använda en int (år) som argument till frågan istället för två strängar kan du använda dateadd
. Se bara till att du inte tillämpar några funktioner/manipulationer på kolumnen ActivityDate eftersom SQL Server inte kommer att kunna använda indexet om 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)