我有一个可能包含重复项的表。我想限制表格只允许一定数量的重复(例如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.
好的,我理解错误(但不是为什么必须这样),还有其他方法可以实现吗?
答案 0 :(得分:1)
这是不可能的。另一个障碍是索引视图中不允许使用HAVING子句(以及子查询)。相反,我实现了一种基于触发器的方法。