Sütunumda nasıl benzersiz bir kısıt oluşturabilirim (SQL Server 2008 R2)?


108

SQL Server 2008 R2'ye sahibim ve benzersiz bir sütun ayarlamak istiyorum.

Bunu yapmanın iki yolu var gibi görünüyor: "benzersiz dizin" ve "benzersiz kısıtlama". Çoğu kişi tarafından benzersiz kısıtlama önerilmesine rağmen, anladığımdan çok farklı değiller, çünkü siz de otomatik olarak bir indeks alırsınız.

Nasıl benzersiz bir kısıt oluşturabilirim?

ALTER TABLE Customer ADD CONSTRAINT U_Name UNIQUE(Name)

SQL Server Management Studio aracılığıyla benzersiz bir kısıtlama oluşturmanın bir yolu var mı?

Yanıtlar:


59

GUI aracılığıyla bu kısıtlamaları oluşturmak için, kontrol kısıtlamalarına değil "indeksler ve anahtarlar" diyaloğuna ihtiyacınız vardır.

Ancak sizin durumunuzda, yalnızca zaten sahip olduğunuz kod parçasını çalıştırmanız gerekir. İfade diyaloğuna hiç girilmesine gerek yoktur.


Yani onu bir sorguda çalıştırabilir miyim? Denediğimde başarılı bir şekilde çalıştı, ancak bunu görmek için gidebileceğim bir yer var mı (yani, ayar nerede değiştirildi)?
White Island

@WhiteIsland - Tabloyu genişletir ve "Anahtarlar" ın altına bakarsanız bunu SSMS nesne Gezgini'nde görmelisiniz
Martin Smith

126

GUI'den SQL Server'da sütunu benzersiz olarak ayarlayın:

GUI ile yapmak için gerçekten ahırda koşturuyorlar:

Başlamadan önce sütununuzun benzersiz kısıtlamayı ihlal etmediğinden emin olun.

  1. SQL Server Management Studio'yu açın.
  2. Tablonuza sağ tıklayın, "Tasarım" a tıklayın.
  3. Düzenlemek istediğiniz sütuna sağ tıklayın, bir açılır menü belirir, Dizinler / Anahtarlar'a tıklayın.
  4. "Ekle" Düğmesine tıklayın.
  5. "Genel" sekmesini genişletin.
  6. Benzersiz yapmak istediğiniz sütunun "sütunlar" kutusunda seçildiğinden emin olun.
  7. "Tür" kutusunu "Benzersiz Anahtar" olarak değiştirin.
  8. "Kapat" ı tıklayın.
  9. Dosya penceresinde küçük bir yıldız işareti görüyorsunuz, bu, değişikliklerin henüz kaydedilmediği anlamına gelir.
  10. Kaydet'e basın veya Ctrl + s tuşlarına basın. Kaydetmeli ve sütununuz benzersiz olmalıdır.

Veya SQL Sorgu penceresinden sütunu benzersiz olarak ayarlayın:

alter table location_key drop constraint pinky;
alter table your_table add constraint pinky unique(yourcolumn);

Değişiklikler hemen yürürlüğe girer:

Command(s) completed successfully.

Harika. Ayrıca, TSQL betiğine şu şekilde birden çok sütun ekleyebilirsiniz: tabloyu değiştir your_table, pinky benzersiz kısıtlaması ekleyin (sütununuz, sütununuz_2);
Ürdün

15

İşte GUI aracılığıyla, nesne gezgini içindeki Dizinlerden (Kısıtlamalar değil) geçse bile komut dosyanızın tam olarak ne yaptığını yapan başka bir yol.

  1. "Dizinler" e sağ tıklayın ve "Yeni Dizin ..." seçeneğine tıklayın (not: tabloyu tasarım görünümünde açarsanız bu devre dışı bırakılır)

görüntü açıklamasını buraya girin

  1. Yeni dizine bir ad verin ("U_Name"), "Benzersiz" seçeneğini işaretleyin ve "Ekle ..." yi tıklayın.

görüntü açıklamasını buraya girin

  1. Sonraki pencerede "Ad" sütununu seçin

görüntü açıklamasını buraya girin

  1. Her iki pencerede de Tamam'ı tıklayın

1
SSMS 2014'te, yeni bir dizin oluşturmak için sağ tıklama bağlam menüsü seçenekleri yukarıdaki ekran görüntülerinden biraz farklıdır. Yeni Dizin'e tıkladığınızda, (Kümelenmiş Dizin, Kümelenmemiş Dizin, Birincil XML Dizini, İkincil XML Dizini, Uzamsal Dizin, Kümelenmemiş Sütun Deposu Dizini ve Kümelenmiş Sütun Deposu Dizini) listesinden seçim yapmanız gerekir. Tipik olarak, Kümelenmemiş Dizini seçersiniz.
iCode

8

Açıkça ele alınmayan bir şey, microsoft sql'nin arka planda eklenen kısıtlama için benzersiz bir dizin oluşturmasıdır.

create table Customer ( id int primary key identity (1,1) , name nvarchar(128) ) 

--Commands completed successfully.

sp_help Customer

---> index
--index_name    index_description   index_keys
--PK__Customer__3213E83FCC4A1DFA    clustered, unique, primary key located on PRIMARY   id

---> constraint
--constraint_type   constraint_name delete_action   update_action   status_enabled  status_for_replication  constraint_keys
--PRIMARY KEY (clustered)   PK__Customer__3213E83FCC4A1DFA  (n/a)   (n/a)   (n/a)   (n/a)   id


---- now adding the unique constraint

ALTER TABLE Customer ADD CONSTRAINT U_Name UNIQUE(Name)

-- Commands completed successfully.

sp_help Customer

---> index
---index_name   index_description   index_keys
---PK__Customer__3213E83FCC4A1DFA   clustered, unique, primary key located on PRIMARY   id
---U_Name   nonclustered, unique, unique key located on PRIMARY name

---> constraint
---constraint_type  constraint_name delete_action   update_action   status_enabled  status_for_replication  constraint_keys
---PRIMARY KEY (clustered)  PK__Customer__3213E83FCC4A1DFA  (n/a)   (n/a)   (n/a)   (n/a)   id
---UNIQUE (non-clustered)   U_Name  (n/a)   (n/a)   (n/a)   (n/a)   name

gördüğünüz gibi, yeni bir kısıt ve yeni bir U_Name indeksi var

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.