SORU
20 NİSAN 2009, PAZARTESİ


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
20 NİSAN 2009, PAZARTESİ


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.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • andony5589

    andony5589

    7 Aralık 2011
  • BrandonHarrisWalker

    BrandonHarri

    27 Kasım 2006
  • Tech4Geeks

    Tech4Geeks

    8 Ocak 2012