sql >> Databasteknik >  >> RDS >> Sqlserver

villkorlig unik begränsning

Se, det filtrerade indexet. Från dokumentationen (min betoning):

Ett filtrerat index är ett optimerat icke-klustrat index speciellt lämpat för att täcka frågor som väljer från en väldefinierad delmängd av data. Den använder ett filterpredikat för att indexera en del av raderna i tabellen. Ett väldesignat filtrerat index kan förbättra frågeprestandan samt minska indexunderhåll och lagringskostnader jämfört med index med fullständiga tabeller.

Och här är ett exempel som kombinerar ett unikt index med ett filterpredikat:

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

Detta framtvingar i huvudsak unikt ID när RecordStatus är 1 .

Efter skapandet av det indexet kommer en unikhetsöverträdelse att ge upphov till ett fel:

Msg 2601, Level 14, State 1, Line 13
Kan inte infoga dubblettnyckelrad i objektet 'dbo.MyTable' med unikt index 'MyIndex'. Dubblettnyckelvärdet är (9999).

Obs:det filtrerade indexet introducerades i SQL Server 2008. För tidigare versioner av SQL Server, se detta svar.



  1. Primärnyckel SQL-handledning – Hur man definierar en primärnyckel i en databas

  2. Hur MID()-funktionen fungerar i MySQL

  3. Använder pg_dump för att bara få infogningssatser från en tabell i databasen

  4. Mysql:Beställa efter like?