제목으로 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 열에서 # 열을 선택하십시오.
답변
테이블이 기본 또는 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