3

このビューにインデックスを作成できません

CCF.UserHistory.NEID計算された永続列です。

CREATE VIEW [Calais].[vwBossDaily]
WITH SCHEMABINDING
AS
  SELECT SUM(ISNULL(Score, 0))               AS Score,
         SUM(ISNULL(DivideBy, 0))            AS DivideBy,
         COUNT_BIG(*)                        AS Count,
         ReportDefGroupID,
         ImportDate,
         MetricID,
         ISNULL(Calais.Card.BossNEID, 0)     AS BossNEID,
         ISNULL(CCF.UserHistory.BossNEID, 0) AS BossBossNEID
  FROM   Calais.Card
         INNER JOIN CCF.UserHistory
           ON Calais.Card.BossNEID = CCF.UserHistory.NEID
              AND Calais.Card.ImportDate = CCF.UserHistory.keyDate
  GROUP  BY ReportDefGroupID,
            ImportDate,
            MetricID,
            ISNULL(Calais.Card.BossNEID, 0),
            ISNULL(CCF.UserHistory.BossNEID, 0)

GO

/****** Object:  Index [VIX_Card]    Script Date: 10/24/2013 11:28:01 ******/
CREATE UNIQUE CLUSTERED INDEX [VIX_Card]
  ON [Calais].[vwBossDaily] ( 
                            [ReportDefGroupID] ASC, 
                            [ImportDate] ASC, 
                            [MetricID] ASC, 
                            [BossNEID] ASC, 
                            [BossBossNEID] ASC )
  WITH (PAD_INDEX = OFF, 
        STATISTICS_NORECOMPUTE = OFF, 
        SORT_IN_TEMPDB = OFF, 
        IGNORE_DUP_KEY = OFF, 
        DROP_EXISTING = OFF, 
        ONLINE = OFF, 
        ALLOW_ROW_LOCKS = ON, 
        ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

GO 

エラー:

メッセージ 1901、レベル 16、状態 1、行 3
キー列 'BossBossNEID' が不正確で、計算され、永続化されていないため、ビュー 'Calais.vwBossDaily' にインデックスまたは統計 'VIX_Card' を作成できません。
ビュー インデックスまたは統計キーの列への参照を削除するか、列を正確に変更することを検討してください。列がベース テーブルで計算される場合は、そこで PERSISTED とマークすることを検討してください。

問題のより簡単な再現は

CREATE TABLE T
(
id int,
BossNEID AS CAST(id as float) PERSISTED
)

GO

CREATE VIEW V
WITH SCHEMABINDING
AS
SELECT ISNULL(BossNEID, 0) AS BossNEID
FROM dbo.T  
GROUP BY ISNULL(BossNEID, 0)

GO

CREATE UNIQUE CLUSTERED INDEX IX ON V(BossNEID) /*Fails*/
4

1 に答える 1