我有一个视图,我希望创建一个失败的索引,因为我需要索引一个计算列(这会失败,错误代码为 2729“......不能用于索引或统计信息或作为分区键,因为它是非确定性的”。我希望能够用一个触发器或一组触发器替换视图,这些触发器或一组触发器将维护一个索引表。视图非常简单。
给定一张桌子:
CREATE TABLE SourceData (
ItemId int NOT NULL,
KeyId int NOT NULL,
Value varchar(MAX) NULL
)
我创建了视图:
CREATE VIEW DateView WITH SCHEMABINDING
AS
SELECT CONVERT(DATETIME, Value) As KeyDate,
ItemId FROM dbo.SourceData WHERE KeyId=123
然后我尝试在视图上创建一个索引:
CREATE NONCLUSTERED INDEX IX_DateView ON dbo.DateView (
[KeyDate] ASC
)
INCLUDE ( [ItemId])
失败了。
我以前没有真正使用过触发器,但我知道我应该能够使用它们来检测和过滤对底层 SourceData 表的任何更改并将它们应用于新表以替换 DateView