내 열 (SQL Server 2008 R2)에 고유 한 제약 조건을 만들려면 어떻게해야합니까?


108

SQL Server 2008 R2가 있고 고유 한 열을 설정하고 싶습니다.

이를 수행하는 방법에는 "고유 인덱스"와 "고유 제약"이라는 두 가지 방법이 있습니다. 대부분이 고유 한 제약 조건을 권장하지만 자동으로 인덱스를 받기 때문에 내가 이해하는 것과 크게 다르지 않습니다.

고유 한 제약은 어떻게 생성합니까?

ALTER TABLE Customer ADD CONSTRAINT U_Name UNIQUE(Name)

SQL Server Management Studio를 통해 고유 한 제약 조건을 만드는 방법이 있습니까?

답변:


59

GUI를 통해 이러한 제약 조건을 생성하려면 제약 조건 검사가 아닌 "인덱스 및 키"대화 상자가 필요합니다.

그러나 귀하의 경우에는 이미 가지고있는 코드를 실행하기 만하면됩니다. 표현 대화에 전혀 입력 할 필요가 없습니다.


그래서 쿼리에서 실행할 수 있습니까? 시도했을 때 성공적으로 실행되었지만 확인할 수있는 곳이 있습니까 (예 : 설정이 변경된 위치)?
White Island

@WhiteIsland-테이블을 확장하고 "키"아래를 보면 SSMS 개체 탐색기에서 볼 수 있습니다.
Martin Smith

126

GUI에서 SQL Server에서 고유 한 열을 설정합니다.

GUI로 헛간을 돌아 다니게 만듭니다.

시작하기 전에 열이 고유 제한 조건을 위반하지 않는지 확인하십시오.

  1. SQL Server Management Studio를 엽니 다.
  2. 테이블을 마우스 오른쪽 버튼으로 클릭하고 "디자인"을 클릭합니다.
  3. 편집 할 열을 마우스 오른쪽 버튼으로 클릭하면 팝업 메뉴가 표시되고 색인 / 키를 클릭합니다.
  4. "추가"버튼을 클릭하십시오.
  5. "일반"탭을 확장합니다.
  6. "열"상자에서 고유하게 만들 열이 선택되어 있는지 확인하십시오.
  7. "유형"상자를 "고유 키"로 변경합니다.
  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 스크립트에 여러 열을 추가 할 수 있습니다. alter table your_table add constraint pinky unique (yourcolumn, yourcolumn_2);
요르단

15

다음은 개체 탐색기에서 인덱스 (제약 조건이 아님)를 통과하더라도 스크립트가 수행하는 작업을 정확히 수행하는 GUI를 통한 또 다른 방법입니다.

  1. "인덱스"를 마우스 오른쪽 단추로 클릭하고 "새 인덱스 ..."를 클릭합니다 (참고 : 디자인보기에서 테이블을 연 경우 비활성화 됨).

여기에 이미지 설명 입력

  1. 새 색인에 이름 ( "U_Name")을 지정하고 "고유"를 선택한 다음 "추가 ..."를 클릭합니다.

여기에 이미지 설명 입력

  1. 다음 창에서 "이름"열을 선택하십시오.

여기에 이미지 설명 입력

  1. 두 창에서 모두 확인을 클릭합니다.

1
SSMS 2014에서 새 인덱스를 만들기위한 오른쪽 클릭 컨텍스트 메뉴 옵션은 위의 화면 캡처와 약간 다릅니다. 새 인덱스를 클릭 할 때 (클러스터형 인덱스, 비 클러스터형 인덱스, 기본 XML 인덱스, 보조 XML 인덱스, 공간 인덱스, 비 클러스터형 Columnstore 인덱스 및 클러스터형 Columnstore 인덱스) 목록에서 선택해야합니다. 일반적으로 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.