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

  • Fullscreen

    Fullscreen

    23 Mart 2006
  • LearnKey

    LearnKey

    19 AĞUSTOS 2008
  • TitaniumBackup

    TitaniumBack

    10 EYLÜL 2011