Bagaimana cara membuat batasan unik di kolom saya (SQL Server 2008 R2)?

108

Saya memiliki SQL Server 2008 R2 dan saya ingin mengatur kolom unik.

Tampaknya ada dua cara untuk melakukan ini: "indeks unik" dan "kendala unik". Mereka tidak jauh berbeda dari yang saya pahami, meskipun kendala unik direkomendasikan oleh sebagian besar orang, karena Anda juga mendapatkan indeks secara otomatis.

Bagaimana cara membuat batasan unik?

ALTER TABLE Customer ADD CONSTRAINT U_Name UNIQUE(Name)

Apakah ada cara untuk membuat batasan unik melalui SQL Server Management Studio?

Pulau Putih
sumber

Jawaban:

59

Untuk membuat batasan ini melalui GUI, Anda memerlukan dialog "indeks dan kunci", bukan dialog batasan.

Tetapi dalam kasus Anda, Anda hanya perlu menjalankan potongan kode yang sudah Anda miliki. Tidak perlu dimasukkan ke dalam dialog ekspresi sama sekali.

Martin Smith
sumber
Jadi saya bisa menjalankannya dalam kueri? Ketika saya mencoba, itu berjalan dengan sukses, tetapi adakah tempat yang dapat saya kunjungi untuk melihatnya (yaitu di mana pengaturan diubah)?
Pulau Putih
@WhiteIsland - Anda akan melihatnya di SSMS object Explorer jika Anda memperluas tabel dan melihat di bawah "Keys"
Martin Smith
126

Tetapkan kolom sebagai unik di SQL Server dari GUI:

Mereka benar-benar membuat Anda berlarian di sekitar gudang untuk melakukannya dengan GUI:

Pastikan kolom Anda tidak melanggar batasan unik sebelum Anda mulai.

  1. Buka SQL Server Management Studio.
  2. Klik kanan Tabel Anda, klik "Desain".
  3. Klik kanan kolom yang ingin Anda edit, menu popup muncul, klik Indeks / Kunci.
  4. Klik Tombol "Tambah".
  5. Luaskan tab "Umum".
  6. Pastikan Anda memiliki kolom yang ingin Anda buat unik dipilih di kotak "kolom".
  7. Ubah kotak "Type" menjadi "Unique Key".
  8. Klik "Tutup".
  9. Anda melihat tanda bintang kecil di jendela file, ini berarti perubahan belum disimpan.
  10. Tekan Simpan atau tekan Ctrl + s. Ini harus disimpan, dan kolom Anda harus unik.

Atau atur kolom sebagai unik dari jendela SQL Query:

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

Perubahan segera berlaku:

Command(s) completed successfully.
Eric Leschinski
sumber
Bagus. Anda juga dapat menambahkan beberapa kolom dalam skrip TSQL seperti ini: mengubah tabel tabel_anda menambahkan batasan pinky unik (kolomanda, kolomanda_2);
Yordania
15

Berikut cara lain melalui GUI yang melakukan apa yang dilakukan skrip Anda meskipun melalui Indeks (bukan Batasan) di penjelajah objek.

  1. Klik kanan pada "Indeks" dan klik "Indeks Baru ..." (catatan: ini dinonaktifkan jika Anda membuka tabel dalam tampilan desain)

masukkan deskripsi gambar di sini

  1. Beri indeks baru nama ("U_Name"), centang "Unik", dan klik "Tambahkan ..."

masukkan deskripsi gambar di sini

  1. Pilih kolom "Nama" di windown berikutnya

masukkan deskripsi gambar di sini

  1. Klik OK di kedua jendela
Tony L.
sumber
1
Di SSMS 2014, opsi menu konteks klik kanan untuk membuat indeks baru sedikit berbeda dari tangkapan layar di atas. Saat mengklik Indeks Baru, Anda harus memilih dari daftar (Indeks Tergugus, Indeks Non-Gugus, Indeks XML Utama, Indeks XML Sekunder, Indeks Spasial, Indeks Toko Kolom Non-Gugus, dan Indeks Toko Kolom Tergugus). Biasanya, Anda akan memilih Non-Clustered Index.
iCode
8

Satu hal yang tidak tercakup dengan jelas adalah bahwa microsoft sql membuat di latar belakang indeks unik untuk kendala tambahan

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

seperti yang Anda lihat, ada batasan baru dan indeks U_Name baru

detzu
sumber