-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)  

このエラーが発生します:

テーブル「クーポン」の列「NofUses」は、非決定論的であるため、インデックスや統計で使用したり、パーティションキーとして使用したりすることはできません。

4

1 に答える 1

6

エラーメッセージは本当にすべてを示しています。この関数は非決定論的であるため(たとえば、同じ入力パラメータで呼び出す場合、毎回同じ結果が得られる保証はありません)、インデックスを作成することはできません

これを回避する唯一の方法は、(関数に基づいていない)通常の列にし、その列に格納されている値を定期的に(たとえば、SQLエージェントジョブによって、またはCouponUseテーブル、またはその他のメカニズム)

于 2012-11-21T12:15:29.563 に答える