sql >> Database >  >> RDS >> Sqlserver

voorwaardelijke unieke beperking

Zie, de gefilterde index. Uit de documentatie (nadruk van mij):

Een gefilterde index is een geoptimaliseerde niet-geclusterde index die speciaal geschikt is voor zoekopdrachten die een selectie maken uit een goed gedefinieerde subset van gegevens. Het gebruikt een filterpredikaat om een ​​deel van de rijen in de tabel te indexeren. Een goed ontworpen gefilterde index kan de queryprestaties verbeteren en de kosten voor indexonderhoud en -opslag verlagen in vergelijking met indexen met volledige tabellen.

En hier is een voorbeeld dat een unieke index combineert met een filterpredikaat:

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

Dit dwingt in wezen de uniciteit van ID af wanneer RecordStatus is 1 .

Na het maken van die index, zal een schending van de uniciteit een argwaan veroorzaken:

Msg 2601, Level 14, State 1, Line 13
Kan geen dubbele sleutelrij invoegen in object 'dbo.MyTable' met unieke index 'MyIndex'. De dubbele sleutelwaarde is (9999).

Opmerking:de gefilterde index is geïntroduceerd in SQL Server 2008. Zie dit antwoord voor eerdere versies van SQL Server.



  1. Hoe MySql op Mac te gebruiken

  2. PLAFOND() Voorbeelden in SQL Server

  3. Inleiding tot Oracle Mobile Cloud Service

  4. Log DBMS_OUTPUT.Put_Line-uitvoer in tabel in Oracle met DBMS_OUTPUT.Get_Lines