使用索引视图来限制表中的重复项数

时间:2016-02-17 01:58:04

标签: sql-server tsql sql-server-2012

我有一个可能包含重复项的表。我想限制表格只允许一定数量的重复(例如100)。我知道这可以使用UDF和表约束来实现 - 但我想避免这种情况,因为存在包括性能在内的缺点。

相反,我正在尝试在索引视图上使用唯一约束的方法。这是我尝试过的:

CREATE VIEW DuplicateCheckView
WITH SCHEMABINDING
AS
    SELECT        1 AS Marker
    UNION ALL
    SELECT        1 AS Marker
    FROM          DuplicateContainingTable
    GROUP BY      KeyColumn1, KeyColumn2, KeyColumn3 
    HAVING        COUNT(1) > 100 
GO

CREATE UNIQUE CLUSTERED INDEX IXU_DuplicatesCheck
   ON DuplicateCheckView (Marker);
GO

这会导致错误

Msg 10116, Level 16, State 1, Line 1
Cannot create index on view 'DuplicatesCheckView' because it contains one or more UNION, INTERSECT, or EXCEPT operators. Consider creating a separate indexed view for each query that is an input to the UNION, INTERSECT, or EXCEPT operators of the original view.

好的,我理解错误(但不是为什么必须这样),还有其他方法可以实现吗?

1 个答案:

答案 0 :(得分:1)

这是不可能的。另一个障碍是索引视图中不允许使用HAVING子句(以及子查询)。相反,我实现了一种基于触发器的方法。