SQL SERVER 2005中基于函数的索引

请假设您有一个名为BEER_HERE的表,其中包含两列:

BEER_CODE VARCHAR(50)
BEER_DATE DATETIME

请假设您有一个名为dbo.TRUNCATE_DATE的函数的可用性,其工作方式如下:

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

我想创建一个基于功能的索引:

(BEER_CODE, dbo.TRUNCATE_DATE(BEER_DATE))

我怎么能实现这个目标?

提前感谢您的帮助.

最佳答案 您需要添加计算列

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

然后,您可以按照预期对其进行索引.

但是,您的函数需要具有确定性和精确性,如http://msdn.microsoft.com/en-us/library/ms189292(v=sql.90).aspx中所定义.您的函数应满足这些要求,但您可能需要将With SchemaBinding添加到函数定义中.

您也可以使用视图

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

插入写入表的东西,从视图读取的东西.这取决于BEER_CODE是主键.

SQL Server没有基于函数的索引,就像Oracle一样.

点赞