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)
해서 은 떨어뜨리고.테이블을 드롭하고 다시 작성해야 합니다.
이러한 문제를 해결하려면 데이터베이스를 마우스 오른쪽 버튼으로 클릭하고 고급 옵션에서 스크립팅할 데이터 유형을 스킴과 데이터로 설정해야 합니다.그 후 이 스크립트를 사용하여 쿼리를 사용하여 테이블을 식별하고 재생성합니다.
을 사용하다
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
'codememo' 카테고리의 다른 글
| 이 시스템에서 실행 중인 스크립트를 사용하지 않도록 설정되었기 때문에 ps1을 로드할 수 없습니다. (0) | 2023.04.08 |
|---|---|
| SQL Server 문자열 또는 이진 데이터가 잘립니다. (0) | 2023.04.08 |
| '다중 부품 식별자'란 무엇이며 왜 바인딩할 수 없는가? (0) | 2023.04.08 |
| jQuery UI 대화 상자에서 닫기 버튼을 제거하는 방법 (0) | 2023.04.08 |
| 오류 수정 방법 - nodeemon.ps1은 이 시스템에서 실행 중인 스크립트를 사용하지 않도록 설정되었기 때문에 로드할 수 없습니다(보안 위험 없음). (0) | 2023.04.08 |