여러 열에 대한 고유 제한


248
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, dcodet-sql및 / 또는 management studio? fcode, scode, dcode함께 고유해야합니다.


9
그것은 동일한 fcode 또는 scode OR dcode를 많이 가질 수 있지만 동일한 fcode AND scode AND dcode를 가진 두 개의 레코드를 가질 수 없다는 것을 의미합니까?
Jimbo

답변:


291

테이블 작성시 제한 조건 정의를 사용하여 여러 열에 걸쳐있는 하나 이상의 제한 조건을 지정할 수 있습니다. technet의 문서 에서 단순화 된 구문 은 다음과 같은 형식입니다.

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

따라서 이어지는 테이블 정의는 다음과 같습니다.

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]

418

테이블이 데이터베이스에서 이미 작성된 경우 다음 SQL 조회를 사용하여 나중에 고유 제한 조건을 추가 할 수 있습니다.

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

아니면 ADD CONSTRAINT ucCodes UNIQUE NONCLUSTERED?
Kiquenet

52

이것은 GUI에서도 가능합니다. 다음은 기존 테이블에 다중 열 고유 제한 조건을 추가하는 예입니다.

  1. 표 아래에서 색인 -> 새 색인 클릭 / 호버 -> 비 클러스터형 색인 클릭 ...을 마우스 오른쪽 단추로 클릭하십시오 .

여기에 이미지 설명을 입력하십시오

  1. 기본 색인 이름이 제공되지만 변경할 수도 있습니다. 확인 고유의 체크 박스를 클릭 추가 ... 버튼을

여기에 이미지 설명을 입력하십시오

  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.