2012-11-21 20 views
-2

我在数据库中创建下面的函数错误在

Create FUNCTION [dbo].[CountUseer](@couponid INT) 
RETURNS INT 
AS 
BEGIN 
RETURN 
(
    SELECT Count(cu.id) NofUses --- this can only return one column 
    FROM Coupon as c 
    JOIN CouponUse as cu 
    ON c.id = cu.couponid 
    WHERE cu.couponid = @couponid 
) 
END 

然后我运行此查询

ALTER TABLE dbo.Coupon 
    ADD NofUses AS dbo.CountUseer(Id) 

现在,当我尝试在创建索引在SQL Server中的列上创建索引列:

CREATE INDEX Noofusesindex ON Coupon (NofUses) 

我得到这个错误:

Column 'NofUses' in table 'Coupon' cannot be used in an index or statistics or as a partition key because it is non-deterministic.

回答

5

那么,错误消息真的说这一切:因为这个功能是非确定性(例如,当您使用相同的输入参数调用它时,不能保证每次都会得到相同的结果),它不能被索引

解决此问题的唯一方法是将其设置为常规列(而不是基于函数),并定期更新存储在该列中的值(例如,通过SQL代理作业,或者CouponUse表格上的触发器或其他某种机制)