SQLServer2005中基于函数的索引

SQLServer2005中基于函数的索引,sql,sql-server-2005,Sql,Sql Server 2005,请假设这里有一个名为BEER_的表,有两列: 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)) 我怎样才能

请假设这里有一个名为BEER_的表,有两列:

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)
然后,您可以按照预期对其进行索引

但是,您的函数需要具有中定义的确定性和精确性。您的函数应该满足这些要求,但是您可能需要在函数定义中添加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_代码是主键


SQL Server不像Oracle那样具有基于函数的索引。

我不知道计算列是如何工作的。我无法添加列,因为Extract Transform加载包只支持BEER_HERE表的N列,而不支持N+1列。您可以使用视图实现类似的功能。我更新了答案以反映这一点。