Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

restrição exclusiva condicional


Eis o índice filtrado. Da documentação (grifo meu):

Um índice filtrado é um índice não clusterizado otimizado especialmente adequado para abranger consultas que selecionam a partir de um subconjunto de dados bem definido. Ele usa um predicado de filtro para indexar uma parte das linhas da tabela. Um índice filtrado bem projetado pode melhorar o desempenho da consulta e reduzir os custos de manutenção e armazenamento do índice em comparação com os índices de tabela completa.

E aqui está um exemplo combinando um índice exclusivo com um predicado de filtro:
create unique index MyIndex
on MyTable(ID)
where RecordStatus = 1;

Isso basicamente reforça a exclusividade de ID quando RecordStatus é 1 .

Após a criação desse índice, uma violação de exclusividade gerará uma erro:

Msg 2601, Level 14, State 1, Line 13
Não é possível inserir linha de chave duplicada no objeto 'dbo.MyTable' com índice exclusivo 'MyIndex'. O valor da chave duplicada é (9999).

Observação:o índice filtrado foi introduzido no SQL Server 2008. Para versões anteriores do SQL Server, consulte esta resposta.