Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

warunkowe ograniczenie unikatowe

Oto przefiltrowany indeks. Z dokumentacji (podkreślenie moje):

Indeks filtrowany to zoptymalizowany indeks nieklastrowany, który jest szczególnie odpowiedni do obsługi zapytań, które wybierają z dobrze zdefiniowanego podzbioru danych. Wykorzystuje predykat filtra do indeksowania części wierszy w tabeli. Dobrze zaprojektowany filtrowany indeks może poprawić wydajność zapytań, a także zmniejszyć koszty utrzymania indeksu i przechowywania w porównaniu z indeksami pełnotabelowymi.

A oto przykład połączenia unikalnego indeksu z predykatem filtra:

create unique index MyIndex
on MyTable(ID)
where RecordStatus = 1;

To zasadniczo wymusza unikalność ID kiedy RecordStatus to 1 .

Po utworzeniu tego indeksu naruszenie unikalności spowoduje zgłoszenie błędu:

Msg 2601, poziom 14, stan 1, wiersz 13
Nie można wstawić zduplikowanego wiersza klucza w obiekcie „dbo.MyTable” z unikatowym indeksem „MyIndex”. Zduplikowana wartość klucza to (9999).

Uwaga:filtrowany indeks został wprowadzony w SQL Server 2008. W przypadku wcześniejszych wersji SQL Server zobacz tę odpowiedź.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak uzyskać wszystkie tabele z lub bez ograniczenia klucza podstawowego w bazie danych serwera SQL — samouczek SQL Server / TSQL 59

  2. Spotlight Cloud Basic:najlepsze bezpłatne narzędzie do monitorowania wydajności bazy danych

  3. Jak zmienić domyślny profil poczty bazy danych dla użytkownika w programie SQL Server (T-SQL)

  4. TransactSQL do uruchomienia innego skryptu TransactSQL

  5. Co to jest operator logiczny IN w SQL Server — samouczek SQL Server / TSQL część 122