otrdiena, 2013. gada 19. februāris

Unikāli indeksi, ignorējot Null vērtības

Vairākkārt sanācis sastapies ar vajadzību izveidot unikālitātes ierobežojumu ignorējot Null vērtības. Bet ir viena problēma- lai arī Null nav vienāds Null, unikāla indeksa ietvaros visas Null vērtības tiek uzskatītas par vienādām. Ko darīt?

Patiesībā risinājums ir gaužām vienkāršs (sākot no SQL Server 2005)- izmantot filtrētos indeksus!
Tas izskatās tā:
Create Unique Nonclustered Index Ix_Unique on dbo.ManaTabula
(
    j
)
Where (J IS NOT NULL)
Ja nu galīgi nav ticība, ka tas strādā, šeit neliels piemērs:
Create Table #test
(
    i int  primary key identity,
    j int
)
Go
Create Unique Nonclustered Index Ix_Unique on #test
(
    j
)
Where (J IS NOT NULL)
Go
Insert into #test (j) values (1);
Insert into #test (j) values (2);
Insert into #test (j) values (2); -- fail

Insert into #test (j) values (Null);
Insert into #test (j) values (Null); -- WORKS
Go
select * from #test

Nav komentāru:

Ierakstīt komentāru