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

编辑
文档为存在此限制的原因提供了更清晰的解释。从“确定性函数”部分:

即使一个表达式是确定性的,如果它包含浮点表达式,确切的结果可能取决于处理器架构或微码的版本。为确保数据完整性,此类表达式只能作为索引视图的非键列参与。不包含浮点表达式的确定性表达式称为精确表达式。只有精确的确定性表达式才能参与键列以及索引视图的 WHERE 或 GROUP BY 子句。

希望有帮助。

于 2011-11-26T06:19:24.907 回答