ฉันจะสร้างข้อ จำกัด ที่ไม่ซ้ำใครบนตารางที่มีอยู่ใน SQL Server 2005 ได้อย่างไร
ฉันกำลังมองหาทั้ง TSQL และวิธีการทำใน Database Diagram
ฉันจะสร้างข้อ จำกัด ที่ไม่ซ้ำใครบนตารางที่มีอยู่ใน SQL Server 2005 ได้อย่างไร
ฉันกำลังมองหาทั้ง TSQL และวิธีการทำใน Database Diagram
คำตอบ:
คำสั่ง SQL คือ:
ALTER TABLE <tablename> ADD CONSTRAINT
<constraintname> UNIQUE NONCLUSTERED
(
<columnname>
)
ถ้าคุณต้องการที่จะทำจากฐานข้อมูลแผนภาพ:
ใน SQL Server Management Studio Express:
ALTER TABLE [TableName] ADD CONSTRAINT [constraintName] UNIQUE ([columns])
คำเตือน: มีเพียงหนึ่งแถวว่างในคอลัมน์ที่คุณตั้งค่าให้ไม่ซ้ำกัน
คุณสามารถทำได้ด้วยดัชนีที่กรองแล้วใน SQL 2008:
CREATE UNIQUE NONCLUSTERED INDEX idx_col1
ON dbo.MyTable(col1)
WHERE col1 IS NOT NULL;
ดูค่าของฟิลด์จะต้องไม่ซ้ำกันเว้นแต่จะเป็นค่า NULLสำหรับช่วงของคำตอบ
ALTER TABLE dbo.<tablename> ADD CONSTRAINT
<namingconventionconstraint> UNIQUE NONCLUSTERED
(
<columnname>
) ON [PRIMARY]
ฉันยังพบว่าคุณสามารถทำได้ผ่านไดอะแกรมฐานข้อมูล
โดยคลิกขวาที่ตารางและเลือกดัชนี / คีย์ ...
คลิกปุ่ม 'เพิ่ม' และเปลี่ยนคอลัมน์เป็นคอลัมน์ที่คุณต้องการทำให้ไม่ซ้ำใคร
การเปลี่ยนแปลงไม่ซ้ำกันเป็นใช่
คลิกปิดและบันทึกไดอะแกรมแล้วมันจะเพิ่มลงในตาราง
คุณกำลังมองหาสิ่งต่อไปนี้
ALTER TABLE dbo.doc_exz
ADD CONSTRAINT col_b_def
UNIQUE column_b
ในการสร้างข้อ จำกัด 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
?
ในแผนภาพสตูดิโอการจัดการเลือกตารางคลิกขวาเพื่อเพิ่มคอลัมน์ใหม่หากต้องการคลิกขวาที่คอลัมน์และเลือก "ตรวจสอบข้อ จำกัด " ที่นั่นคุณสามารถเพิ่มหนึ่ง
ในบางสถานการณ์อาจเป็นที่ต้องการเพื่อให้แน่ใจว่าไม่มีคีย์ที่ไม่ซ้ำกันก่อนสร้าง ในกรณีเช่นนี้สคริปต์ด้านล่างอาจช่วยได้:
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