-1

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

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' 不能用于索引或统计信息或用作分区键,因为它是不确定的。

4

1 回答 1

6

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

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

于 2012-11-21T12:15:29.563 回答