Nasıl da boş değerlere izin veren benzersiz bir kısıtlama oluşturabilirim? | Netgez.com
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

  • ★ByScrapi★ Designs

    ★ByScrapiâ

    27 AÄžUSTOS 2013
  • Diogo Oliveira

    Diogo Olivei

    4 HAZÄ°RAN 2006
  • HDstarcraft

    HDstarcraft

    12 Mayıs 2009