답변:
아니요-다른 방법으로 수행해야합니다. 가서 바로 추가하십시오 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
alter table attachments add ATTACHMENT_NUMBER int identity (1000, 1)
PRIMARY KEY
의미가 있음을 암시합니다 NOT NULL
-다시-절대적으로 필요한 것은 아닙니다. 그러나 나는 일을 선호 명시 하고 난 항상이 때문에 NOT NULL
이 단지 절대적으로 명확하게하기
PRIMARY KEY
(사용자가 명시 적으로 지정하지 않는 한, 클러스터 된 인덱스가 당신을 위해 자동으로 생성됩니다 NONCLUSTERED
)
IDENTITY를 "설정"할 수 없습니다. 테이블을 다시 작성하는 것입니다.
숫자 순서를 신경 쓰지 않으면 IDENTITY를 사용하여 NOT NULL 열을 한 번에 추가하십시오. 150k 행은 많지 않습니다.
숫자 순서를 유지해야하는 경우 그에 따라 숫자를 추가하십시오. 그런 다음 SSMS 테이블 디자이너를 사용하여 IDENTITY 속성을 설정하십시오. 이를 통해 열 삭제 / 추가 / 번호 유지 / 리드를 수행하는 스크립트를 생성 할 수 있습니다.
ALTER TABLE ... SWITCH
에는 가능합니다.
열이 이미 테이블에 존재하고 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
시도해 볼 수있는 아이디어가 있습니다. ID 테이블이없는 원래 테이블 table1은 새 테이블을 작성합니다. 식별 컬럼과 함께 table2를 호출하십시오. table1에서 table2로 데이터 복사-ID 열은 자동 증분 숫자로 자동 채워집니다.
원래 테이블 이름을 table1에서 table3으로 바꿉니다. 새 테이블 이름을 table2로 바꾸십시오 (원본 테이블). 이제 기존 데이터에 대해 식별 열이 포함되고 채워진 table1이 있습니다. 문제가없고 올바르게 작동하는지 확인한 후 더 이상 필요하지 않으면 table3을 삭제하십시오.
다른 이름과 동일한 열, 기본 키 및 외래 키 연결을 사용하여 새 테이블을 만들고이를 코드 삽입 문에 연결하십시오. 예 : 직원의 경우 직원으로 바꿉니다.
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)
)
그러나 기존 EMPLOYEE 테이블을 삭제하거나 요구 사항에 따라 일부 조정을 수행해야합니다.
이 답변은 최고 투표 답변에 약간 추가 된 것이며 SQL Server에서 작동합니다. 질문에 자동 증분 기본 키가 요청되었지만 현재 답변에 기본 키가 추가되었지만 자동 증분으로 플래그가 지정되지 않았습니다. 아래 스크립트는 열의 존재 여부를 확인하고 자동 증분 플래그를 활성화하여 추가합니다.
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 int IDENTITY (1,1) 추가
/ **에서 삭제 표 이름을 붙여 넣기 ** /
(
a.id FROM 선택 / ** 테이블 이름 붙여 넣기 / 왼쪽 외부 조인으로 (MIN (id)를 id FROM으로 선택 / 테이블 이름 붙여 넣기 / GROUP BY / 열 c1, c2 .... ** 붙여 넣기
) as t1
ON a.id = t1.id
t1.id가 NULL 인 경우
)
테이블 변경 / ** 테이블 이름 붙여 넣기 ** / DROP COLUMN id
다음과 같이 시도하십시오 (먼저 테스트 테이블에서).
your_database_name 사용 가다 (your_id_field가 NULL 인 your_table에서 COUNT (*) 선택)> 0 시작 행 번호 설정 1 업데이트 your_table SET your_id_field = MAX (your_id_field) +1 종료 '모두 완료'인쇄
나는 이것을 전혀 테스트하지 않았으므로 조심하십시오!
IDENTITY
열 추가에 관한 ) 어쨌든 작동하지 않습니다. UPDATE your_table SET your_id_field = MAX(your_id_field)+1
당신은 MAX
거기에 척 할 수 없습니다 . WHERE
동일한 행을 반복적으로 업데이트하지 않는 절 은 어디에 있습니까 ?
ALTER TABLE ORDER ALTER COLUMN ORDERNO RESTART WITH 1
하지만 전문가와 확인하지 않고 시도하고 싶지 않았습니다. :) Ref. pic.dhe.ibm.com/infocenter/iseries/v7r1m0/…