请假设您有一个名为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一样.