SQL Server Management Studio 2012의 기본 자동 키 증가


447

어떻게 할 A의 데이터베이스 테이블, 내가 포럼을 통해 살펴 했어하지만 어떻게 볼 수 없습니다.auto incrementprimary keySQL Server

속성을 보았지만 옵션을 볼 수 없습니다. Identity사양 속성으로 이동 하여 yes로 설정하고 Identity increment1로 설정하는 대답을 보았지만 해당 섹션은 회색으로 표시되어 변경할 수 없습니다 그렇습니다.

이 작업을 수행하는 간단한 방법이 있어야하지만 찾을 수 없습니다.


5
키 열의 데이터 유형이 int입니까?
Raab

1
@code 중독자의 currenty의 문자 (10)로 설정하지만 난 그냥 연습 해요으로 나는 그것을 변경할 수 있습니다, 감사
Ledgemonkey

답변:


704

키 열의 데이터 유형이 올바른지 확인한 int다음 이미지가 표시하는 것처럼 ID를 수동으로 설정하십시오.

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

아니면 그냥이 코드를 실행

-- ID is the name of the  [to be] identity column
ALTER TABLE [yourTable] DROP COLUMN ID 
ALTER TABLE [yourTable] ADD ID INT IDENTITY(1,1)

ID테이블의 유일한 열이 아닌 경우 코드가 실행됩니다.

이미지 참조 fifo


21
보정 단지 비트가 다음 IDENTITY(이 될 수 있도록 속성이 어떤 숫자 데이터 유형에 적용될 수 tinyint, smallint, int, bigint, numeric, decimal), 유일한 제한은 그래서 (분수를 나타낼 수 없다는 것이다 수 없다 float 거나 real, 둘 numeric또는 decimal 스케일이 0이 아닌 ) 및 ofc 인 경우 ID 스펙은 선택한 데이터 유형과 호환 가능해야합니다.
Pred

2
외래 키 등을 제공하지 않는 작업
Andrew Day

3
방금 ID 열에 기본값을 설정 한 경우 (Is Identity)가 회색으로 유지됩니다. 기본값을 제거하면 다시 사용할 수있게됩니다.
CDspace

7
값을 수정할 수없는 경우 도구-옵션-디자이너로 이동하여 "재 작성이 필요한 변경 사항 저장 방지"옵션을 선택 취소하십시오.
Jaume

185

테이블을 만들 때 IDENTITY다음과 같이 열을 만들 수 있습니다 .

CREATE TABLE (
  ID_column INT NOT NULL IDENTITY(1,1) PRIMARY KEY,
  ...
);

IDENTITY속성은 1 번부터 열을 자동 증가시킵니다. (열의 데이터 유형은 정수 여야합니다.) 기존 열에 추가하려면 ALTER TABLE명령을 사용하십시오 .

편집 :
약간 테스트했지만 다양한 테이블의 열 속성 창을 통해 Identity 속성을 변경하는 방법을 찾을 수 없습니다. 열을 ID 열로 만들고 싶다면 ALTER TABLE명령 을 사용해야합니다 .


아, 이것은 SQL Server 2008 r2 전용입니다.
Josien

2
이 테이블 작성 구문은 주석 에서이 게시물의 작성자가 조언 한대로 모범 사례 입니다. 희망은 누군가를 돕습니다.
shaijut

88

증분 및 시드를 노출하려면 ID 섹션을 확장해야합니다.

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

편집 : char (10)이 아닌 정수 데이터 유형이 있다고 가정했습니다. 이 답변을 게시했을 때 말하고 유효한 것은 합리적입니다.


2
yes그대로 회색으로 표시됩니다 char(10)(방금 게시 한 의견에서)
Martin Smith

@Martin Smith 네, 일반적인 문제인 것 같습니다. 이것을 변경하고 테스트 해 주셔서 감사합니다.
Ledgemonkey

내가 사용한 새 테이블을 만드는 동안 BookID int primary key identity시드와 증분을 모두 지정하지 않았습니다. 좋은 습관입니까? 원인 MSDN의 설명서를 참조하십시오. 어느 것도 지정하지 않으면 기본값은 (1,1)입니다.
shaijut

40

데이터베이스를 확장하고 테이블을 마우스 오른쪽 단추로 클릭 한 후 드롭 다운 에서 디자인 을 선택하십시오. IT는 이렇게 생겼습니다

이제 아래의 열 속성으로 이동하여 아래로 스크롤하여 Identity Specification을 찾아 확장하면 Is Identity 가 Yes로 표시됩니다. 이제 바로 아래의 Identity Increment 를 선택하여 증가시킬 값을 지정하십시오. 여기에 이미지 설명을 입력하십시오


1
이것은 나에게 정답 일 것 같습니다. 데이터 유형을 int로 설정하면 트릭을 수행하지 않을 것입니다.
Drewdin

10

아마도 뭔가 빠졌지 만 왜 이것이 SEQUENCE 객체에서 작동하지 않습니까? 찾고있는 것이 아닌가요?

예:

CREATE SCHEMA blah.
GO

CREATE SEQUENCE blah.blahsequence
START WITH 1
INCREMENT BY 1
NO CYCLE;

CREATE TABLE blah.de_blah_blah
(numbers bigint PRIMARY KEY NOT NULL
......etc

INSERT 명령에서 스 퀀스를 참조 할 때 다음을 사용하십시오.

NEXT VALUE FOR blah.blahsequence

SEQUENCE에 대한 추가 정보 및 옵션


삽입 된 행의 시간 순서에 관심이있는 경우이 솔루션이 올바른 솔루션입니다. IDENTITY간헐적으로 간격을두고 점프 한 다음 다시 간격을 채우기 위해 다시 돌아 오기 때문입니다. 따라서 IDENTITY항상 incrmenet 상태를 보장하지는 않습니다
FindOut_Quran

1
@Martin Smith 죄송합니다. 링크를 따르지 않았습니다. MS-SQL에 익숙해 져서 더 많은 것을 지원하는 최신 버전이 있다는 것을 잊어 버리는 특정 기능이 없습니다. 혼란 스러울 수 있으므로 내 의견을 삭제합니다 ... 더 일반적으로 표현하면 여전히 유효합니다 .SEQUENCE 객체를 지원하지 않는 RDBMS make / version을 사용 중일 수 있습니다. 특히 질문에 대해서만 SQL Server 2012가 릴리스 된 후 몇 개월;)
Paul Groke

1
@FindOut_Quran IDENTITY 열의 간격이 채워 졌습니까? 나는 그런 일을 본 적이없는 SQL Server 2005에서만 일했습니다. 간극은 여전히 ​​남아 있습니다. 그리고 그러한 기능이 "무료가 아닌"(성능 적)과 "바람직하지 않은"(적어도 대부분의 응용 프로그램에서는)의 이상한 조합이기 때문에 RDBMS에서 발생하는 것을보고 놀랐습니다.
Paul Groke

@PaulGroke 네, 확실합니다. 1000 개의 행을 삽입 한 다음 롤백하기 위해 트랜잭션을 사용할 수 있습니다. 이데 네 티티 가치가 높아질 것입니다. 수천 개의 행을 삽입하고 커밋 / 롤백하십시오. 당신은 때때로 채우기 간격으로 백업 알
FindOut_Quran

@FindOut_Quran 이것이 어떻게 일어날 수 있는지 알 수 없습니다. MS SQL IDENTITY 열은 사용자 정의 가능한 값으로 시드 된 다음 사용자 정의 가능한 값만큼 증가하는 간단한 카운터를 사용합니다. 카운터를 쿼리하고 재설정 할 수도 있습니다. 이 상황이 발생하는 것을 볼 수있는 유일한 방법은 동시 트랜잭션이 "잘못된 순서"를 커밋하는 것입니다. 즉, IDENTITY 카운터 에 처음 충돌 한 트랜잭션 은 다른 트랜잭션 후에 커밋 됩니다. 이 경우 수명이 짧아 채워집니다. 충돌을 피하기 위해 필요합니다. IDENTITY 카운터는 결코 뒤로 물러서지 않을 것입니다.
Paul Groke

7

데이터 유형 : int를 사용하는 경우 자동 증가시킬 행을 선택하고 열 속성 태그로 이동할 수 있습니다. 여기서 ID를 'yes'로 설정할 수 있습니다. 자동 증가의 시작 값도 편집 할 수 있습니다. 내가 도울 수 있기를 바랍니다.)


열 속성은 어디에 있습니까?

2

나는 이미 테이블을 만들었고 테이블 을 삭제하지 않고 테이블을 변경할 수없는 이 문제가 있었으므로 내가 한 일은 다음과 같습니다.

개체 탐색기에서 테이블을 마우스 오른쪽 버튼으로 클릭하십시오.

Script Table as > DROP And CREATE To > New Query Editor Window

그런 다음 Josien이 말한 스크립트를 편집하십시오. 가있는 맨 아래로 스크롤 CREATE TABLE하여 기본 키를 찾은 다음 IDENTITY(1,1)쉼표 앞의 끝에 추가하십시오 . 스크립트를 실행하십시오.

이 문제로 인해 DROP 및 CREATE 스크립트도 도움 이되었습니다. (생성 된 스크립트가 처리하는 동안)


1

ID 요소를 연속적으로 사용하고 싶은지주의하십시오. SQLSERVER ID는 1000만큼 이동할 수 있습니다.

예 : 재시작 후 ID = 11을 재시작하기 전에 테이블에 새 행을 삽입하면 ID는 1012가됩니다.


1

테이블 작성시 제한 조건 IDENTITY과 함께 키워드 를 컬럼의 데이터 유형으로 사용할 수 있습니다 PRIMARY KEY.
전의:

StudentNumber IDENTITY(1,1) PRIMARY KEY

여기서 첫 번째 '1'은 시작 값을 의미하고 두 번째 '1'은 증가 값입니다.


1
CREATE TABLE Persons (
    Personid int IDENTITY(1,1) PRIMARY KEY,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Age int
);

MS SQL Server는 IDENTITY 키워드를 사용하여 자동 증분 기능을 수행합니다.

위의 예에서 IDENTITY의 시작 값은 1이며 새 레코드마다 1 씩 증가합니다.

팁 : "개인"열이 값 10에서 시작하여 5 씩 증가하도록 지정하려면 IDENTITY (10,5)로 변경하십시오.

"개인"테이블에 새 레코드를 삽입하기 위해 "개인"열의 값을 지정할 필요가 없습니다 (고유 한 값이 자동으로 추가됨).


0

테이블이 이미 채워져 있으면 열을 IDENTITY 열로 변경하거나 비 IDENTITY 열로 변환 할 수 없습니다. 모든 데이터를 내 보내야하고 열 유형을 IDENTITY로 또는 그 반대로 변경 한 다음 데이터를 다시 가져올 수 있습니다. 나는 그것이 고통스러운 과정이라는 것을 알고 있지만이 게시물에 언급 된 순서를 사용하는 것 외에는 대안이 없다고 생각합니다.


1
ALTER TABLE ... SWITCH데이터를 전혀 터치하지 않고도 메타 데이터를 전환하는 데 사용할 수 있습니다 . 예를 들어 데이터 손실없이 테이블을 생성 한 후 자동 증분을 설정하는 방법을
Martin Smith

1
귀하가 제공 한 링크에 언급 된 프로세스는 위의 진술에 동의하는 임시 테이블로 데이터를 전송하는 것과 관련이 있습니다. 내가 틀렸다면 실례를 제시하십시오.
Softec

1
링크에 실제 예제가 있습니다. "데이터를 임시 테이블로 전송 및 다시 전송"이 없습니다. `ALTER TABLE ... SWITCH`는 메타 데이터 전용 변경입니다. 데이터를 이동하지 않습니다.
마틴 스미스
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.