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.