codememo

SQL Server에서 기존 테이블에 자동 증가 기본 키 추가

tipmemo 2023. 4. 8. 08:29
반응형

SQL Server에서 기존 테이블에 자동 증가 기본 키 추가

제목으로 저는 이미 1500,000개의 레코드가 채워진 기존 테이블을 가지고 있습니다.ID 열(현재는 null)을 추가했습니다.

쿼리를 실행하여 이 열을 증분 번호로 채운 다음 기본 키로 설정하고 자동 증분 기능을 켤 수 있습니다.이렇게 진행하는 게 맞습니까?그렇다면 초기 번호는 어떻게 채워야 하나요?

부터 ''로 추가합니다. 반대로 해야 합니다.이치노INT IDENTITY - 아, 아이디로 채워집니다.

ALTER TABLE dbo.YourTable
   ADD ID INT IDENTITY

그것을 프라이머리 키로 할 수 있습니다.

ALTER TABLE dbo.YourTable
   ADD CONSTRAINT PK_YourTable
   PRIMARY KEY(ID)

또는 한 번에 모든 작업을 수행할 수 있습니다.

ALTER TABLE dbo.YourTable
   ADD ID INT IDENTITY
       CONSTRAINT PK_YourTable PRIMARY KEY CLUSTERED

ID를 「온」할 수 없습니다.테이블 리빌드입니다.

번호 순서를 신경 쓰지 않으면 IDENTY를 NULL이 아닌 열을 한 번에 추가합니다. 15,000 행은 많지 않습니다.

번호 순서를 보존할 필요가 있는 경우는, 적절히 번호를 추가합니다.다음으로 SSMS 테이블디자이너를 사용하여 IDENTY 속성을 설정합니다.이를 통해 드롭/추가/보관/재검색된 컬럼을 실행하는 스크립트를 생성할 수 있습니다.

이 문제가 있었는데 (여러 가지 이유로) 아이덴티티 열을 사용할 수 없었습니다.난 이걸 결심했어:

DECLARE @id INT
SET @id = 0 
UPDATE table SET @id = id = @id + 1 

여기서 빌렸다.

컬럼이 테이블에 이미 존재하고 늘인 경우 다음 명령어(replace id, tablename 및 tablekey)를 사용하여 컬럼을 갱신할 수 있습니다.

UPDATE x
SET x.<Id> = x.New_Id
FROM (
  SELECT <Id>, ROW_NUMBER() OVER (ORDER BY <tablekey>) AS New_Id
  FROM <tablename>
  ) x

기존 테이블에 및 ID 열을 추가하면 수동으로 입력할 필요가 없습니다.

이 답변은 투표율이 가장 높은 답변에 약간의 추가 사항으로 SQL Server에서 사용할 수 있습니다.질문에 의해 프라이머리 키가 자동으로 증가하도록 요구되었습니다.현재 응답에서는 프라이머리 키가 추가되지만 auto-increment로 플래그가 설정되어 있지 않습니다.아래 스크립트는 열과 존재를 확인하고 자동 증분 플래그를 사용하도록 설정한 상태로 추가합니다.

IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'YourTable' AND COLUMN_NAME = 'PKColumnName')
BEGIN


ALTER TABLE dbo.YourTable
   ADD PKColumnName INT IDENTITY(1,1)

CONSTRAINT PK_YourTable PRIMARY KEY CLUSTERED

END

GO
ALTER TABLE table_name ADD temp_col INT IDENTITY(1,1) 
update 

디자이너에 의해 ID 컬럼에서 tbl = > desing = > 일부 왼쪽(우클릭) = > 속성 = > #column 을 우클릭하여 ID (1,1)

특성.

[ Identity ]카람

해서 은 떨어뜨리고.테이블을 드롭하고 다시 작성해야 합니다.
이러한 문제를 해결하려면 데이터베이스를 마우스 오른쪽 버튼으로 클릭하고 고급 옵션에서 스크립팅할 데이터 유형을 스킴과 데이터로 설정해야 합니다.그 후 이 스크립트를 사용하여 쿼리를 사용하여 테이블을 식별하고 재생성합니다.
을 사용하다

USE [Db_YourDbName]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
Drop TABLE [dbo].[Tbl_TourTable]

CREATE TABLE [dbo].[Tbl_TourTable](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [Name] [nvarchar](50) NULL,
    [Family] [nvarchar](150) NULL)  

GO

SET IDENTITY_INSERT [dbo].[Tbl_TourTable] ON 

INSERT [dbo].[Tbl_TourTable] ([ID], [Name], [Family]) VALUES (1,'name 1', 'family 1')
INSERT [dbo].[Tbl_TourTable] ([ID], [Name], [Family]) VALUES (1,'name 1', 'family 1')
INSERT [dbo].[Tbl_TourTable] ([ID], [Name], [Family]) VALUES (1,'name 1', 'family 1')
INSERT [dbo].[Tbl_TourTable] ([ID], [Name], [Family]) VALUES (1,'name 1', 'family 1')
INSERT [dbo].[Tbl_TourTable] ([ID], [Name], [Family]) VALUES (1,'name 1', 'family 1')
INSERT [dbo].[Tbl_TourTable] ([ID], [Name], [Family]) VALUES (1,'name 1', 'family 1')
INSERT [dbo].[Tbl_TourTable] ([ID], [Name], [Family]) VALUES (1,'name 1', 'family 1')

SET IDENTITY_INSERT [dbo].[Tbl_TourTable] off 

여기 여러분이 시도할 수 있는 아이디어가 있습니다.원래 테이블 - ID 열 없음 table1은 ID 열과 함께 새 테이블 - 콜 테이블2를 만듭니다.copy the data from table1 to table2 :ID 컬럼에는 자동으로 증분된 번호가 입력됩니다.

원래 테이블 이름 - table1에서 table3으로 변경 - table2에서 table1로 변경 - table2에서 table1(원래 테이블)로 변경 - ID 컬럼이 포함된 table1이 기존 데이터에 대해 입력되었습니다.문제가 없는지 확인하고 정상적으로 동작한 후 table3을 더 이상 필요하지 않을 때 드롭합니다.

이름이 다른 새 테이블과 동일한 열, 기본 키 및 외부 키 연결을 만들고 코드 삽입 문에 링크합니다.예: EXPURE의 경우 EXPURE로 대체합니다.

CREATE TABLE EMPLOYEES(

    EmpId        INT NOT NULL IDENTITY(1,1), 
    F_Name       VARCHAR(20) ,
    L_Name       VARCHAR(20) ,
    DOB          DATE ,
    DOJ          DATE ,
    PRIMARY KEY (EmpId),
    DeptId int FOREIGN KEY REFERENCES DEPARTMENT(DeptId),
    DesgId int FOREIGN KEY REFERENCES DESIGNATION(DesgId),
    AddId int FOREIGN KEY REFERENCES ADDRESS(AddId)   
) 

그러나 기존 직원 테이블을 삭제하거나 필요에 따라 조정해야 합니다.

alter table /** 탭 이름 **/ add id int IDENTY(1,1) 붙여넣기

/**에서 삭제하여 탭 이름 **/을 붙여넣습니다.여기서 id는

(

a.id FROM /** 를 선택해, 탭명 / 를 왼쪽 외부 조인(ID 로서 MIN(id) 를 선택해 주세요./탭명 / GROUP BY / c1, c2 열 붙여넣기...**/

) as t1 
ON a.id = t1.id

여기서 t1.id은 무효입니다.

)

alter table /** 테이블 이름 **/DROP COLUMN ID 붙여넣기

아래 코드를 사용해 보십시오.

DBCC CHECKIDENT ('settings', RESEED, 0) 

이것은 MariaDB에서 동작하기 때문에 SQL Server에서만 동작할 수 있습니다.방금 삽입한 ID 열을 삭제하고 다음 구문을 사용합니다.-

ALTER TABLE_name ID INT 프라이머리 키 AUTO_INCREMENT;

다른 테이블은 필요 없습니다.이렇게 하면 id 열이 삽입되어 기본 인덱스가 되고 순차적인 값으로 채워집니다.SQL Server에서 이 작업을 수행할 수 없다면 시간을 낭비한 점 사과드립니다.

(먼저 테스트 테이블에서) 다음과 같은 작업을 수행합니다.

_database_name 사용가세요while (your_id_field가 NULL인 테이블에서 카운트(*)를 선택합니다)> 0시작한다.행 수 1을 설정UPDATE your_table SET your_id_field = MAX(your_id_field)+1끝.'모두 완료'로 인쇄

저는 전혀 테스트하지 않았으니 조심하세요!

ALTER TABLE_name ADD Column ID INT NOT NULL Primary Key AUTO_INCREMENT. 이것은 도움이 될 수 있습니다.

언급URL : https://stackoverflow.com/questions/4862385/sql-server-add-auto-increment-primary-key-to-existing-table

반응형