Sql Server에서 자동 증분을 만드는 방법

4806 단어
원래 여기에 게시됨: https://koalatea.io/sql-server-auto-increment/

소개



최근에 저는 postgresql 데이터베이스를 SQL 서버로 마이그레이션했습니다. 내가 만난 한 가지 문제는 Id 열을 마이그레이션하고 이전과 동일한 값을 유지하는 것이었습니다. SQL 서버에서는 열을 ID로 변경할 수 없으며 ID 열을 편집할 수 없습니다. 온라인 리소스에서는 새 열을 만들거나 각 행을 다시 삽입할 것을 제안했지만 큰 db에 Azure DB 마이그레이션 도구를 사용하고 있었고 이전 db가 삭제되었기 때문에 순차적 ID가 보장되지 않았기 때문에 이는 좋은 옵션이 아니었습니다. 내 솔루션은 Id 열에 대해 내 자신의 자동 증가를 구현하는 것이 었습니다.

설정



예제는 다소 복잡하지만 작은 예제를 설정하겠습니다.

직원 테이블부터 시작합니다.

CREATE TABLE employees (
    id int not null,
  first_name VARCHAR (50) NOT NULL,
  last_name VARCHAR (50) NOT NULL,
);


Azure 마이그레이션 도구를 사용할 때 이전 데이터를 ID에 매핑할 수 없으므로 ID에 int를 사용합니다.

이제 이전 데이터베이스에서 일부 기존 데이터를 삽입할 수 있습니다.

insert into employees (id, first_name, last_name) 
    values 
    (1, 'keith', 'holliday'),
    (2, 'jon', 'doe'),
    (4, 'jon', 'dane');


행 3이 없다는 점에 유의하십시오. 이는 이전 데이터베이스에서 행이 삭제되었기 때문입니다. 이전 데이터베이스에는 해당 ID에 의존하는 관계가 많기 때문에 ID를 재설정할 수 없습니다.

지금 삽입하면 id 열이 자동으로 증가하지 않습니다. 이를 해결하기 위해 테이블에 대한 시퀀스를 생성하고 다음 값을 id 열의 기본값으로 설정해 보겠습니다.

CREATE SEQUENCE employees_ids 
    START WITH 5
    INCREMENT BY 1;  


1씩 증가하고 테이블의 현재 최대 ID보다 하나 더 많은 5에서 시작하는 시퀀스를 만들었습니다. 이제 id 열의 기본값을 설정해야 합니다.

alter table employees 
add constraint employees_id
default (next value for employees_ids) for id;


위의 내용은 삽입 시 시퀀스의 다음 값을 크롤링하는 제약 조건을 만듭니다. 새 직원을 추가하여 이를 테스트할 수 있습니다.

insert into employees (first_name, last_name) 
    values 
    ('ash', 'ketchum');



ID
이름



1
키스
홀리데이

2

암사슴

4

덴마크 사람

5
금연 건강 증진 협회
케첨


마지막으로 이제 이것을 기본 키로 만들 수 있습니다.

ALTER TABLE employees 
   ADD CONSTRAINT PK_employees_id PRIMARY KEY (id);

좋은 웹페이지 즐겨찾기