Het is niet nodig om een berekende kolom te hebben om "een tabel te zoeken" voor rijen die overeenkomen met een jaar. Schrijf je waar-clausule in plaats daarvan met een interval en plaats een index in je datumkolom.
select SomeColumn
from YourTable
where ActivityDate >= '20110101' and
ActivityDate < '20120101'
Als u een int (jaar) als argument voor de query wilt gebruiken in plaats van twee strings, kunt u dateadd
gebruiken . Zorg er wel voor dat u geen functies/manipulaties toepast op de ActivityDate-kolom, omdat SQL Server de index dan niet kan gebruiken.
declare @Year int = 2011
select SomeColumn
from YourTable
where ActivityDate >= dateadd(year, @Year-1900, 0) and
ActivityDate < dateadd(year, @Year-1899, 0)