このビューにインデックスを作成できません
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*/