ข้อ จำกัด ที่ไม่ซ้ำกันในหลายคอลัมน์


249
CREATE TABLE [dbo].[user](
        [userID] [int] IDENTITY(1,1) NOT NULL,
        [fcode] [int] NULL,
        [scode] [int] NULL,
        [dcode] [int] NULL,
        [name] [nvarchar](50) NULL,
        [address] [nvarchar](50) NULL,
     CONSTRAINT [PK_user_1] PRIMARY KEY CLUSTERED 
    (
        [userID] ASC
    )
    ) ON [PRIMARY]

    GO

ฉันจะเพิ่มข้อ จำกัด เฉพาะสำหรับคอลัมน์ที่fcode, scode, dcodeมีt-sqlและ / หรือmanagement studioอย่างไร fcode, scode, dcodeจะต้องไม่ซ้ำกัน


9
นั่นหมายความว่าคุณสามารถมีรหัสหรือ scode หรือ dcode เดียวกันจำนวนมาก แต่ไม่เคยมีสองระเบียนที่มีรหัสเดียวกันและ scode และ dcode เดียวกันหรือไม่
Jimbo

คำตอบ:


291

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

CONSTRAINT constraint_name UNIQUE [ CLUSTERED | NONCLUSTERED ] 
(
    column [ ASC | DESC ] [ ,...n ]
)

ดังนั้นคำจำกัดความของตาราง resuting จะเป็น:

CREATE TABLE [dbo].[user](
    [userID] [int] IDENTITY(1,1) NOT NULL,
    [fcode] [int] NULL,
    [scode] [int] NULL,
    [dcode] [int] NULL,
    [name] [nvarchar](50) NULL,
    [address] [nvarchar](50) NULL,
    CONSTRAINT [PK_user_1] PRIMARY KEY CLUSTERED 
    (
        [userID] ASC
    ),
    CONSTRAINT [UQ_codes] UNIQUE NONCLUSTERED
    (
        [fcode], [scode], [dcode]
    )
) ON [PRIMARY]

420

หากตารางถูกสร้างขึ้นในฐานข้อมูลแล้วคุณสามารถเพิ่มข้อ จำกัด ที่ไม่ซ้ำกันในภายหลังโดยใช้แบบสอบถาม SQL นี้:

ALTER TABLE dbo.User
  ADD CONSTRAINT ucCodes UNIQUE (fcode, scode, dcode)

หรือADD CONSTRAINT ucCodes UNIQUE NONCLUSTERED?
Kiquenet

52

สิ่งนี้สามารถทำได้ใน GUI นี่คือตัวอย่างการเพิ่มข้อ จำกัด ที่ไม่ซ้ำกันหลายคอลัมน์ลงในตารางที่มีอยู่

  1. ใต้ตารางคลิกขวาที่ดัชนี -> คลิก / โฮเวอร์ดัชนีใหม่ -> คลิกดัชนีที่ไม่ทำคลัสเตอร์ ...

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

  1. ชื่อดัชนีเริ่มต้นจะได้รับ แต่คุณอาจต้องการเปลี่ยนชื่อ ตรวจสอบที่ไม่ซ้ำกันและคลิกAdd ...ปุ่ม

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

  1. ตรวจสอบคอลัมน์ที่คุณต้องการรวม

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

คลิกตกลงในแต่ละหน้าต่างและคุณทำเสร็จแล้ว


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

0
USE [TSQL2012]
GO

/****** Object:  Table [dbo].[Table_1]    Script Date: 11/22/2015 12:45:47 PM ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[Table_1](
    [seq] [bigint] IDENTITY(1,1) NOT NULL,
    [ID] [int] NOT NULL,
    [name] [nvarchar](50) NULL,
    [cat] [nvarchar](50) NULL,
 CONSTRAINT [PK_Table_1] PRIMARY KEY CLUSTERED 
(
    [ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY],
 CONSTRAINT [IX_Table_1] UNIQUE NONCLUSTERED 
(
    [name] ASC,
    [cat] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

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