在SQL Server中的列上创建索引时出错

Sma*_*boy -1 sql t-sql sql-server sql-server-2008

我在我的数据库中创建了以下函数

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 
Run Code Online (Sandbox Code Playgroud)

然后我运行这个查询

   ALTER TABLE dbo.Coupon
   ADD NofUses AS dbo.CountUseer(Id)
Run Code Online (Sandbox Code Playgroud)

现在,当我尝试在列上创建索引时NofUses:

CREATE INDEX Noofusesindex ON Coupon (NofUses)  
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

表'Coupon'中的列'NofUses'不能用于索引或统计信息或分区键,因为它是非确定性的.

mar*_*c_s 6

好吧,错误信息真的说明了一切:因为这个函数是非确定性的(例如,当你使用相同的输入参数调用它时,不能保证每次都能获得相同的结果),它不能被索引.

解决这个问题的唯一方法是使它成为常规列(不基于函数),并且定期更新存储在该列中的值(例如,通过SQL代理作业或通过CouponUse表,或其他一些机制)