ฉันจะสร้างข้อ จำกัด เฉพาะบนคอลัมน์ของฉัน (SQL Server 2008 R2) ได้อย่างไร


112

ฉันมี SQL Server 2008 R2 และต้องการตั้งค่าคอลัมน์เฉพาะ

ดูเหมือนจะมีสองวิธีในการดำเนินการนี้: "ดัชนีเฉพาะ" และ "ข้อ จำกัด เฉพาะ" ไม่แตกต่างจากที่ฉันเข้าใจมากนักแม้ว่าส่วนใหญ่จะแนะนำข้อ จำกัด เฉพาะเนื่องจากคุณจะได้รับดัชนีโดยอัตโนมัติ

ฉันจะสร้างข้อ จำกัด เฉพาะได้อย่างไร

ALTER TABLE Customer ADD CONSTRAINT U_Name UNIQUE(Name)

มีวิธีสร้างข้อ จำกัด เฉพาะผ่าน SQL Server Management Studio หรือไม่

คำตอบ:


59

ในการสร้างข้อ จำกัด เหล่านี้ผ่าน GUI คุณต้องมีกล่องโต้ตอบ "ดัชนีและคีย์" ไม่ใช่ข้อ จำกัด ในการตรวจสอบ

แต่ในกรณีของคุณคุณต้องรันโค้ดที่คุณมีอยู่แล้ว ไม่จำเป็นต้องใส่เข้าไปในบทสนทนาของนิพจน์เลย


ดังนั้นฉันสามารถเรียกใช้ในแบบสอบถามได้หรือไม่ เมื่อฉันลองมันทำงานได้สำเร็จ แต่ฉันสามารถไปดูได้ทุกที่ (เช่นการตั้งค่าเปลี่ยนไปที่ไหน)
White Island

@WhiteIsland - คุณควรเห็นใน SSMS object Explorer ถ้าคุณขยายตารางและดูใต้ "Keys"
Martin Smith

130

ตั้งค่าคอลัมน์เป็นค่าเฉพาะใน SQL Server จาก GUI:

พวกเขาทำให้คุณวิ่งไปรอบ ๆ โรงนาเพื่อทำกับ GUI:

ตรวจสอบให้แน่ใจว่าคอลัมน์ของคุณไม่ละเมิดข้อ จำกัด เฉพาะก่อนที่คุณจะเริ่ม

  1. เปิด Studio จัดการเซิร์ฟเวอร์ SQL
  2. คลิกขวาที่ตารางของคุณคลิก "ออกแบบ"
  3. คลิกขวาที่คอลัมน์ที่คุณต้องการแก้ไขเมนูป๊อปอัปจะปรากฏขึ้นคลิกดัชนี / คีย์
  4. คลิกปุ่ม "เพิ่ม"
  5. ขยายแท็บ "ทั่วไป"
  6. ตรวจสอบให้แน่ใจว่าคุณมีคอลัมน์ที่คุณต้องการทำให้ไม่ซ้ำกันซึ่งเลือกไว้ในช่อง "คอลัมน์"
  7. เปลี่ยนช่อง "Type" เป็น "Unique Key"
  8. คลิก "ปิด"
  9. คุณเห็นเครื่องหมายดอกจันเล็กน้อยในหน้าต่างไฟล์ซึ่งหมายความว่าการเปลี่ยนแปลงยังไม่ได้รับการบันทึก
  10. กดบันทึกหรือกด Ctrl + s ควรบันทึกและคอลัมน์ของคุณควรไม่ซ้ำกัน

หรือตั้งค่าคอลัมน์เป็นค่าเฉพาะจากหน้าต่างแบบสอบถาม SQL:

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

การเปลี่ยนแปลงจะมีผลทันที:

Command(s) completed successfully.

เยี่ยมมาก นอกจากนี้คุณสามารถเพิ่มหลายคอลัมน์ในสคริปต์ TSQL เช่นนี้: แก้ไขตาราง your_table เพิ่มข้อ จำกัด พิ้งกี้ที่ไม่ซ้ำกัน (yourcolumn, yourcolumn_2);
จอร์แดน

15

นี่เป็นอีกวิธีหนึ่งใน GUI ที่ทำสิ่งที่สคริปต์ของคุณทำแม้ว่าจะผ่าน Indexes (ไม่ใช่ข้อ จำกัด ) ใน object explorer

  1. คลิกขวาที่ "Indexes" และคลิก "New Index ... " (หมายเหตุ: จะปิดใช้งานหากคุณเปิดตารางในมุมมองออกแบบ)

ป้อนคำอธิบายภาพที่นี่

  1. ตั้งชื่อดัชนีใหม่ ("U_Name") เลือก "ไม่ซ้ำ" แล้วคลิก "เพิ่ม ... "

ป้อนคำอธิบายภาพที่นี่

  1. เลือกคอลัมน์ "ชื่อ" ในการไขลานถัดไป

ป้อนคำอธิบายภาพที่นี่

  1. คลิกตกลงในทั้งสองหน้าต่าง

1
ใน SSMS 2014 ตัวเลือกเมนูบริบทคลิกขวาสำหรับการสร้างดัชนีใหม่จะแตกต่างจากการจับภาพหน้าจอด้านบนเล็กน้อย เมื่อคลิกดัชนีใหม่คุณต้องเลือกจากรายการ (ดัชนีคลัสเตอร์, ดัชนีที่ไม่ใช่คลัสเตอร์, ดัชนี XML หลัก, ดัชนี XML รอง, ดัชนีเชิงพื้นที่, ดัชนีที่เก็บคอลัมน์ที่ไม่ใช่คลัสเตอร์และดัชนีที่เก็บคอลัมน์แบบคลัสเตอร์) โดยทั่วไปคุณจะเลือก Non-Clustered Index
iCode

8

สิ่งหนึ่งที่ไม่ได้กล่าวถึงอย่างชัดเจนคือ microsoft sql กำลังสร้างดัชนีเฉพาะสำหรับข้อ จำกัด ที่เพิ่มเข้ามาในเบื้องหลัง

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

อย่างที่คุณเห็นมีข้อ จำกัด ใหม่และดัชนีใหม่U_Name

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.