Índice basado en funciones en SQL SERVER 2005

Supongamos que tiene una tabla llamada BEER_HERE, con dos columnas:

BEER_CODE VARCHAR(50) BEER_DATE DATETIME 

Supongamos también que tiene la disponibilidad de una function llamada dbo.TRUNCATE_DATE que funciona de la siguiente manera:

 dbo.TRUNCATE_DATE ('23/12/2012 23:59:57.395') ==> 23/12/2012 00:00:00.000 

Me gustaría crear un ÍNDICE BASADO EN LA FUNCIÓN en:

 (BEER_CODE, dbo.TRUNCATE_DATE(BEER_DATE)) 

¿Cómo podría lograr esto?

Gracias de antemano por su amable ayuda.

Debería agregar una columna calculada

 Alter Table BEER_HERE Add Column XBEER_DATE As dbo.TRUNCATE_DATE(BEER_DATE) 

A continuación, puede indexarlo como era de esperar.

Sin embargo, su function debe ser determinista y precisa, tal como se define en http://msdn.microsoft.com/en-us/library/ms189292(v=sql.90).aspx . Su function debe cumplir estos requisitos, pero es posible que deba agregar Con SchemaBinding a la definición de la function.

También es posible que pueda usar una vista

 Create View V_BEER_HERE As Select BEER_CODE, BEER_DATE, dbo.TRUNCATE_DATE(BEER_DATE) As XBEER_DATE From BEER_HERE Create Unique Clustenetworking Index PK_V_BEER_HERE On V_BEER_HERE (BEER_CODE) Create Index I_XBEER_DATE On V_BEER_HERE (XBEER_DATE) 

Las cosas que inserta escriben en la table, las cosas que lee se leen desde la vista. Esto depende de que BEER_CODE sea una key primaria.

SQL Server no tiene índices basados ​​en funciones de la misma manera que Oracle.