2

インデックス付きビューを作成しようとしていますが、インデックスの作成中に次のエラーが発生します。

ビューでインデックスを作成できません ....' は、WHERE または GROUP BY 句でビューによって参照される列 'Amount' が不正確であるためです。ビューから列を削除するか、列を正確に変更することを検討してください。

問題の列にrealは、問題があると思われるデータ型がありますか?

これを解決する適切な方法は何ですか? 「不正確さ」を解消するために、ビュー SQL で変換を行うことはできますか?

ビュー SQL は次のように指定されます。

EXEC('
   CREATE VIEW model.ReceivableBillableParties
   WITH SCHEMABINDING
   AS
      SELECT pf.Id AS Id
         , pf.InsuranceId AS InsuranceId
         , pf.FinancialInsType AS InsuranceType
         , pr.ReceivableId
      FROM dbo.Receivables pr
      INNER JOIN dbo.Demographics pd ON pd.PersonId = pr.PersonId
      INNER JOIN dbo.Appointments ap ON ap.AppointmentId = pr.AppointmentId
      INNER JOIN dbo.Financiasl pf ON pf.PersonId = pf.PersonId
      INNER JOIN dbo.PracticeInsurers pri ON pri.InsurerId = pf.FinancialInsurerId
      WHERE pri.Amount = 0
')

EXEC('
   CREATE UNIQUE CLUSTERED INDEX [IX_ReceivableBillableParties]
   ON model.ReceivableBillableParties ([Id]);
')
4

1 に答える 1

6

ドキュメントは、問題がデータ型にあることを示しています(real精度要件を参照)。ビューの句でその列を使用し、WHEREそのビューにインデックスを付けたい場合は、列を正確なデータ型 (つまりDECIMAL(9, 2)) に変更する必要があります。

EDIT
このドキュメントは、この制限が存在する理由についてより明確な説明を提供します。「決定論的関数」セクションから:

式が決定論的であっても、浮動小数点式が含まれている場合、正確な結果はプロセッサ アーキテクチャまたはマイクロコードのバージョンに依存する場合があります。データの整合性を確保するために、このような式は、インデックス付きビューの非キー列としてのみ参加できます。float 式を含まない deterministic 式は、precision と呼ばれます。キー列、およびインデックス付きビューの WHERE または GROUP BY 句に参加できるのは、正確な決定論的式だけです。

それが役立つことを願っています。

于 2011-11-26T06:19:24.907 に答える