Nasıl da boş değerlere izin veren benzersiz bir kısıtlama oluşturabilirim?
GUID ile doldurmak için gidiyorum hangi bir sütun benzersiz kısıtlama yapmak istiyorum. Ancak, verilerimi bu sütunlar için null değerleri içerir. Ne kadar çok boş değerlere izin veren kısıtlaması oluşturabilirim?
İşte example scenario. Bu şema göz önünde bulundurun:
CREATE TABLE People (
Id INT CONSTRAINT PK_MyTable PRIMARY KEY IDENTITY,
Name NVARCHAR(250) NOT NULL,
LibraryCardId UNIQUEIDENTIFIER NULL,
CONSTRAINT UQ_People_LibraryCardId UNIQUE (LibraryCardId)
)
O zaman elde etmek istediğim için bu kodu bakın:
-- This works fine:
INSERT INTO People (Name, LibraryCardId)
VALUES ('John Doe', 'AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA');
-- This also works fine, obviously:
INSERT INTO People (Name, LibraryCardId)
VALUES ('Marie Doe', 'BBBBBBBB-BBBB-BBBB-BBBB-BBBBBBBBBBBB');
-- This would *correctly* fail:
--INSERT INTO People (Name, LibraryCardId)
--VALUES ('John Doe the Second', 'AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA');
-- This works fine this one first time:
INSERT INTO People (Name, LibraryCardId)
VALUES ('Richard Roe', NULL);
-- THE PROBLEM: This fails even though I'd like to be able to do this:
INSERT INTO People (Name, LibraryCardId)
VALUES ('Marcus Roe', NULL);
Son bir bildiri mesajı ile başarısız:
BENZERSİZ ANAHTAR kısıtlaması ihlali ''. UQ_People_LibraryCardİd Yinelenen anahtar nesne eklenemiyor 'dbo.'. İnsanlar
Nasıl benim şema değişikliği ve hala gerçek verilere teklik denetlerken NULL
birden çok değer verir, böylece veya kısıtlama/teklik edebilir miyim?
CEVAP
Ne aradığını gerçekten bir parçası ANSI standartları SQL:92, SQL:1999 ve SQL:2003, yani BENZERSİZ bir kısıtlama olmalı vermemek yinelenen BOŞ olmayan değerler ama kabul et çok BOŞ değerler.
SQL Server Microsoft dünyada ancak tek bir BOŞ izin verilir, ancak birden fazla Boşluk var
SQL Server 2008eşsiz bir filtre uygulanmış dizin tanımlayabilirsiniz Null dışlayan bir yüklem dayalı:
CREATE UNIQUE NONCLUSTERED INDEX idx_yourcolumn_notnull
ON YourTable(yourcolumn)
WHERE yourcolumn IS NOT NULL;
Önceki sürümlerde, bu kısıtlamayı zorlamak için DEĞİL, BOŞ bir yüklem ile GÖRÜŞ için çare olabilir.
MySQL boş değerlere izin verir benzers...
Nasıl MySQL birden çok sütun benzersiz...
SQL Server 2005 Nasıl Benzersiz Kısıtl...
Nasıl't boş değerlere izin yok bu...
Boş değerlere izin Django benzersiz al...