SQL Server 2005 สร้างข้อ จำกัด ที่ไม่ซ้ำได้อย่างไร


181

ฉันจะสร้างข้อ จำกัด ที่ไม่ซ้ำใครบนตารางที่มีอยู่ใน SQL Server 2005 ได้อย่างไร

ฉันกำลังมองหาทั้ง TSQL และวิธีการทำใน Database Diagram

คำตอบ:


272

คำสั่ง SQL คือ:

ALTER TABLE <tablename> ADD CONSTRAINT
            <constraintname> UNIQUE NONCLUSTERED
    (
                <columnname>
    )

ดูไวยากรณ์เต็มรูปแบบที่นี่

ถ้าคุณต้องการที่จะทำจากฐานข้อมูลแผนภาพ:

  • คลิกขวาบนตารางและเลือก 'ดัชนี / คีย์'
  • คลิกปุ่มเพิ่มเพื่อเพิ่มดัชนีใหม่
  • ป้อนข้อมูลที่จำเป็นในคุณสมบัติทางด้านขวา:
    • คอลัมน์ที่คุณต้องการ (คลิกปุ่มจุดไข่ปลาเพื่อเลือก)
    • set เป็นค่าเฉพาะใช่
    • ตั้งชื่อที่เหมาะสม

1
ใช้งานได้ ... แต่ ... ทำไมข้อ จำกัด จึงแสดงใต้โฟลเดอร์ INDEX แทนโฟลเดอร์ CONSTRAINTS มันจะแสดงพร้อมกับไอคอนอื่น แต่อย่างไรก็ตามควรอยู่ที่โฟลเดอร์ข้อ จำกัด
Fernando Torres

84

ใน SQL Server Management Studio Express:

  • คลิกขวาที่ตารางเลือกแก้ไขหรือออกแบบ (สำหรับรุ่นที่ใหม่กว่า)
  • คลิกขวาที่ฟิลด์เลือกดัชนี / คีย์ ...
  • คลิกเพิ่ม
  • สำหรับคอลัมน์ให้เลือกชื่อเขตข้อมูลที่คุณต้องการให้ไม่ซ้ำ
  • สำหรับประเภทเลือกที่สำคัญที่ไม่ซ้ำกัน
  • คลิกปิด , บันทึกตาราง


15

คำเตือน: มีเพียงหนึ่งแถวว่างในคอลัมน์ที่คุณตั้งค่าให้ไม่ซ้ำกัน

คุณสามารถทำได้ด้วยดัชนีที่กรองแล้วใน SQL 2008:

CREATE UNIQUE NONCLUSTERED INDEX idx_col1
ON dbo.MyTable(col1)
WHERE col1 IS NOT NULL;

ดูค่าของฟิลด์จะต้องไม่ซ้ำกันเว้นแต่จะเป็นค่า NULLสำหรับช่วงของคำตอบ


คุณจะทำเช่นนี้ใน sql server 2005 ได้อย่างไร
Maxrunner

2
ไม่สามารถทำได้ใน sql server 2005 ฉันขอแนะนำอย่างยิ่งให้อัปเกรด RDBMS ที่เป็นปัจจุบันมากขึ้น - จะไม่ได้รับการสนับสนุนอย่างเป็นทางการตั้งแต่วันที่ 12 เมษายน 2016
reedstonefood


10

ฉันยังพบว่าคุณสามารถทำได้ผ่านไดอะแกรมฐานข้อมูล

โดยคลิกขวาที่ตารางและเลือกดัชนี / คีย์ ...

คลิกปุ่ม 'เพิ่ม' และเปลี่ยนคอลัมน์เป็นคอลัมน์ที่คุณต้องการทำให้ไม่ซ้ำใคร

การเปลี่ยนแปลงไม่ซ้ำกันเป็นใช่

คลิกปิดและบันทึกไดอะแกรมแล้วมันจะเพิ่มลงในตาราง



6

ในการสร้างข้อ จำกัด UNIQUE บนหนึ่งหรือหลายคอลัมน์เมื่อตารางถูกสร้างขึ้นแล้วให้ใช้ SQL ต่อไปนี้:

ALTER TABLE TableName ADd UNIQUE (ColumnName1,ColumnName2, ColumnName3, ...)

เพื่ออนุญาตการตั้งชื่อข้อ จำกัด UNIQUE สำหรับแบบสอบถามด้านบน

ALTER TABLE TableName ADD CONSTRAINT un_constaint_name UNIQUE (ColumnName1,ColumnName2, ColumnName3, ...)

แบบสอบถามสนับสนุนโดย MySQL / SQL Server / Oracle / MS Access


UNIQUE NONCLUSTERED และตัวเลือก PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON ?
Kiquenet

5

ในแผนภาพสตูดิโอการจัดการเลือกตารางคลิกขวาเพื่อเพิ่มคอลัมน์ใหม่หากต้องการคลิกขวาที่คอลัมน์และเลือก "ตรวจสอบข้อ จำกัด " ที่นั่นคุณสามารถเพิ่มหนึ่ง


0

ในบางสถานการณ์อาจเป็นที่ต้องการเพื่อให้แน่ใจว่าไม่มีคีย์ที่ไม่ซ้ำกันก่อนสร้าง ในกรณีเช่นนี้สคริปต์ด้านล่างอาจช่วยได้:

IF Exists(SELECT * FROM sys.indexes WHERE name Like '<index_name>')
    ALTER TABLE dbo.<target_table_name> DROP CONSTRAINT <index_name> 
GO

ALTER TABLE dbo.<target_table_name> ADD CONSTRAINT <index_name> UNIQUE NONCLUSTERED (<col_1>, <col_2>, ..., <col_n>) 
GO
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.