Il n'est pas nécessaire d'avoir une colonne calculée pour "rechercher dans une table" les lignes qui correspondent à une année. Écrivez-vous une clause where en utilisant un intervalle à la place et ayez un index sur votre colonne de date.
select SomeColumn
from YourTable
where ActivityDate >= '20110101' and
ActivityDate < '20120101'
Si vous souhaitez utiliser un entier (année) comme argument de la requête au lieu de deux chaînes, vous pouvez utiliser dateadd
. Assurez-vous simplement que vous n'appliquez aucune fonction/manipulation à la colonne ActivityDate car SQL Server ne pourra pas utiliser l'index si vous le faites.
declare @Year int = 2011
select SomeColumn
from YourTable
where ActivityDate >= dateadd(year, @Year-1900, 0) and
ActivityDate < dateadd(year, @Year-1899, 0)