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.