[sql-server] SQL Server는 기존 테이블에 자동 증분 기본 키를 추가합니다

제목으로 150000 레코드로 이미 채워진 기존 테이블이 있습니다. ID 열을 추가했습니다 (현재 null 임).

쿼리를 실행 하여이 열을 증분 숫자로 채운 다음 기본 키로 설정하고 자동 증분을 켤 수 있다고 가정합니다. 이것이 올바른 진행 방법입니까? 그렇다면 어떻게 초기 숫자를 채울 수 있습니까?



답변

아니요-다른 방법으로 수행해야합니다. 가서 바로 추가하십시오 INT IDENTITY.이 작업을 수행하면 ID 값으로 채워집니다.

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


답변

IDENTITY를 “설정”할 수 없습니다. 테이블을 다시 작성하는 것입니다.

숫자 순서를 신경 쓰지 않으면 IDENTITY를 사용하여 NOT NULL 열을 한 번에 추가하십시오. 150k 행은 많지 않습니다.

숫자 순서를 유지해야하는 경우 그에 따라 숫자를 추가하십시오. 그런 다음 SSMS 테이블 디자이너를 사용하여 IDENTITY 속성을 설정하십시오. 이를 통해 열 삭제 / 추가 / 번호 유지 / 리드를 수행하는 스크립트를 생성 할 수 있습니다.


답변

이 문제가 있었지만 다양한 이유로 ID 열을 사용할 수 없습니다. 나는 이것에 정착했다 :

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

여기 에서 빌려 왔습니다 .


답변

열이 이미 테이블에 존재하고 null 인 경우이 명령으로 열을 업데이트 할 수 있습니다 (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


답변

기존 테이블에 열을 추가하고 식별하면 열을 자동으로 채울 필요가 없으며 수동으로 채울 필요가 없습니다.


답변

디자이너에 의해 tbl => desing => 부분 왼쪽에서 마우스 오른쪽 버튼 클릭 (오른쪽 클릭) => 속성 => ID 열에서 # 열을 선택하십시오.

속성

idendtity 열


답변

테이블이 기본 또는 foriegen 키를 사용하여 다른 테이블과 관계가있는 경우 테이블을 변경하는 것이 불가능할 수 있습니다. 따라서 테이블을 삭제하고 다시 만들어야합니다.
이러한 문제를 해결하려면 데이터베이스를 마우스 오른쪽 단추로 클릭하고 고급 옵션에서 데이터 유형을 구성표 및 데이터에 스크립트로 작성하여 스크립트를 생성해야합니다. 그 후, 쿼리 실행을 사용하여 테이블을 식별하고 재생성하기 위해 열을 변경하면서이 스크립트를 사용하십시오.
귀하의 검색어는 다음과 같습니다.

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