기존 테이블에 열을 추가하고 MS SQL Server에서 고유 한 번호를 지정합니다.


121

기존 레거시 데이터베이스에 을 추가하고 각 레코드에 다른 값을 할당 할 수 있는 절차 를 작성하려고 합니다 . 열을 추가 하고 데이터를 자동 생성하는 것과 같은 것입니다.

마찬가지로 "ID"(숫자)라는 새 열을 추가하면 각 레코드에 고유 한 값을 초기화하고 싶습니다. 따라서 내 ID 열에1 to 1000.
어떻게하나요?


2
이것은 데이터베이스에 따라 다릅니다. 작업중인 데이터베이스를 지정해야합니다.
dvorak

1
이를 언급하도록 질문을 편집해야합니다.
dvorak

답변:


221

이는 데이터베이스에 따라 다르지만 SQL Server의 경우 다음과 같이 수행 할 수 있습니다.

alter table Example
add NewColumn int identity(1,1)

5
그것은 아름답게 작동했고 내가 필요한 모든 숫자를 자동으로 추가했습니다. 감사!
djangofan 2011 년

9
Management Studio GUI를 변경하는 데 문제가있는 경우 / Tools / Options / Designer / Table 및 Database Desiger에서 설정을 변경할 수 있습니다. 확인란의 Prevent saving changes that require table re-creation선택을 취소하고 해당 확인란을 사용하여 ID 열을 추가 할 수 있습니다. gui.
surfmuggle 2012

22

사용중인 SQL 데이터베이스를 게시하면 도움이 될 것입니다. MySQL의 경우 아마도 auto_increment를 원할 것입니다.

ALTER TABLE tableName ADD id MEDIUMINT NOT NULL AUTO_INCREMENT KEY

그래도 값이 소급 적용되는지 확실하지 않습니다. 그렇지 않은 경우 저장 프로 시저 또는 간단한 프로그램 (다른 사람이 데이터베이스에 기록하지 않는 한)을 사용하여 값을 반복하고 LAST_INSERT_ID()함수를 사용하여 id 값을 생성하도록 설정할 수 있어야 합니다.


7
나는 이것이 실제로 MySQL에서 작동한다는 것을 확인할 수 있습니다. 인덱싱되지 않은 기존 테이블에 증분 ID 필드를 추가했으며 각 행에는 고유 한 새 ID가 있습니다.
Doug Kavendek

오래된 것이 미안하지만 제목에 SQL 서버라고 적혀 있습니다.
Nick

11

오라클의 경우 아래와 같이 할 수 있습니다.

alter table mytable add (myfield integer);

update mytable set myfield = rownum;

8

그리고 Postgres에 해당합니다 ( "id"를 키로 설정하려는 경우에만 두 번째 줄이 필수입니다) :

ALTER TABLE tableName ADD id SERIAL;
ALTER TABLE tableName ADD PRIMARY KEY (id);


3

SQL Server의 UNIQUEIDENTIFIER 데이터 유형에 대해서는 이것을 시도하십시오.

Alter table table_name
add ID UNIQUEIDENTIFIER not null unique default(newid())

해당 열에서 기본 키를 만들려면 다음을 사용하십시오.

ALTER TABLE table_name
ADD CONSTRAINT PK_name PRIMARY KEY (ID);

0

각 데이터베이스에는 시퀀스 번호를 추가하는 다른 방법이 있으므로 데이터베이스에 따라 다릅니다. 열을 추가하도록 테이블을 변경 한 다음 groovy / python / etc에 db 스크립트를 작성하여 데이터를 읽고 ID를 시퀀스로 업데이트합니다. 데이터가 설정되면 상위 번호 이후에 시작하는 테이블에 시퀀스를 추가합니다. 데이터가 설정되면 기본 키를 올바르게 설정하십시오.


0

새 열의 유형 IDENTITY(자동 증가)을 원하지 않거나 행 번호가 매겨지는 순서를 구체적으로 지정하려면 유형의 열을 추가 한 INT NULL다음 이와 같이 채울 수 있습니다. 이 예에서 새 열은 MyNewColumn이고 테이블의 기존 기본 키 열은 MyPrimaryKey입니다.

UPDATE MyTable
SET MyTable.MyNewColumn = AutoTable.AutoNum
FROM
(
    SELECT MyPrimaryKey, 
    ROW_NUMBER() OVER (ORDER BY SomeColumn, SomeOtherColumn) AS AutoNum
    FROM MyTable 
) AutoTable
WHERE MyTable.MyPrimaryKey = AutoTable.MyPrimaryKey  

이것은 SQL Sever 2005 이상에서 작동합니다. ROW_NUMBER()

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.