如果在一个计算列上创建索引?该计算列是根据一个函数获得的
表
ID 自动增加
FeedBackID 计算列,dbo.GetFeedBackID(ID)
函数:dbo.GetFeedBackID实际上就是取ID的后9位(不足补0,然后逐位加,其和的个位数就是第10位
实际应用中,要求FeedBackID唯一,所以我就用此方法保证FeedBackID 唯一
CREATE FUNCTION dbo.GetFeedBackID (@ID int)
RETURNS nvarchar(10) AS
...
return @FeedID
END
平时查询对FeedBackID 较多,所以需要创建索引
创建索引一开始提示 创建对象失败,没有设置 ANSI_NULLs
我通过Set选项 Alter后,现在又报
'ACC_DATA_TABLE ' 表
- 不能创建索引 'IX_ACC_DATA_TABLE '。
ODBC 错误: [Microsoft][ODBC SQL Server Driver][SQL Server]无法创建索引,因为键列 'FeedBackID ' 不具有确定性或不精确。
[Microsoft][ODBC SQL Server Driver][SQL Server]未能创建约束。请参阅前面的错误信息。
怎么解决,还是SQLSERVER根本不支持计算公式依赖于函数的?
[解决办法]
這樣行不通的,计算列不能建立索引
考慮將ID作為主鍵,應該可以提高效率吧
[解决办法]
--当计算列上引用了函数时,是不能建立索引的,楼主可以按下面方法实现计算列建索引
create table tb(id int ,col as right(1000000000+id,9) )
create unique index id_col on tb(col)
insert into tb values(1)
insert into tb values(11)
insert into tb values(111)
select * from tb
drop table tb