我无法在此视图上创建索引
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 行
无法在视图“Calais.vwBossDaily”上创建索引或统计信息“VIX_Card”,因为键列“BossBossNEID”不精确、已计算且未保留。
考虑删除对视图索引或统计键中的列的引用,或者准确地更改列。如果列是在基表中计算的,请考虑将其标记为 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*/