我在数据库中创建了以下功能
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)
现在,当我尝试在列NofUses
上创建索引时:
CREATE INDEX Noofusesindex ON Coupon (NofUses)
我收到此错误:
表'Coupon'中的列'NofUses'不能用于索引或 统计信息或作为分区键,因为它是不确定的。
答案 0 :(得分:6)
好吧,错误信息真的说明了一切:因为这个功能是非确定性的(例如,当你使用相同的输入参数调用它时,并不能保证你'每次都会得到相同的结果),无法编入索引。
解决这个问题的唯一方法是使其成为常规列(不基于函数),并且定期更新存储在该列中的值(例如,通过SQL代理作业或通过触发CouponUse
表,或其他一些机制)