У меня есть таблица, которая может содержать дубликаты. Я хотел бы ограничить таблицу, чтобы разрешить только определенное количество дубликатов (например, 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.
OK Я понимаю ошибку (но не очень, почему это должно быть именно так), есть ли другой способ добиться этого?
Предположим, что индексированный вид для этого случая - хорошая идея. Зачем вам этот союз? –
Если вы явно используете значение '1' для каждой строки результата для столбца' marker', как вы ожидаете, что они будут 'уникальными'? – Raj
@IvanStarostin Мне не нужны экземпляры более 100 дубликатов. Без UNION, если у меня есть только один экземпляр, тогда индекс будет по-прежнему оставаться уникальным. Цель UNION заключается в том, что первый экземпляр избыточных дубликатов приведет к ошибке. – innomatics