위의 모든 링크에서 조각을 결합 후, 나는 대답을 위해 단순화,이 스크립트를 내놓았다. 그것이 내가 (관계를 삭제 그렇다) 원래 작업 테이블을 터치하지 않았 음을 의미하기 때문에
테이블 변경
JOB
Id Guid PK
Name nvarchar
CreationDate datetime
REPORT
Id Guid PK
JobId int
Name nvarchar
CreationDate datetime
SCRIPT
-- Create new Job table with new Id column
select JobId = IDENTITY(INT, 1, 1), Job.*
into Job2
from Job
order by CreationDate
-- Add new JobId column to Report
alter table Report add JobId2 int
-- Populate new JobId column
update Report
set Report.JobId2 = Job2.JobId
from Job2
where Report.JobId = Job2.Id
-- Delete Old Id
ALTER TABLE Job2 DROP COLUMN Id
-- Delete Relationships
ALTER TABLE Report DROP CONSTRAINT [FK_Report_Job]
ALTER TABLE Job DROP CONSTRAINT PK_Job
-- Create Relationships
ALTER TABLE [dbo].[Job2] ADD CONSTRAINT [PK_Job] PRIMARY KEY CLUSTERED
([JobId] ASC)
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90) ON [PRIMARY]
ALTER TABLE [dbo].[Report] WITH CHECK ADD CONSTRAINT [FK_Report_Job] FOREIGN KEY([JobId2])
REFERENCES [dbo].[Job2] ([JobId])
ON DELETE CASCADE
ALTER TABLE [dbo].[Report] CHECK CONSTRAINT [FK_Report_Job]
-- Rename Columns
sp_RENAME 'Report.JobId', 'OldJobId' , 'COLUMN'
sp_RENAME 'Report.JobId2', 'JobId' , 'COLUMN'
-- Rename Tables
sp_rename Job, Job_Old
sp_rename Job2, Job
전에 나는 그래서, 작업 2 테이블을 생성 무언가가 나 빠지면 모든 것을 원래의 상태로 쉽게 되돌릴 수 있습니다.
은 왜 그냥 http://stackoverflow.com/questions/3698793/how-to-add-a-new-identity-column-to-a-table-in-sql-server를 기반으로 뭔가를 할 수 없습니다 –
확인 http://stackoverflow.com/questions/6084572/how-to-set-auto-increment-after-creating-a-table-without-any-data-loss/6086661#6086661에서 http : // 유래. 질문과 대답 17040124/add-an-identity-column-existing-table-as-the-primary-key-and-change-order –
내가 한 것은 여러 단계의 과정이었습니다. (1) (2) 모든 외래 키 제약 조건 삭제, (3) 영향을받는 테이블의 모든 기본 키 삭제, (4) 해당 테이블에 새로운 ID INT 열 생성 (5) 외래 키 제약 조건을 복원합니다. 이 모든 스크립트는 매우 쉽게 작성할 수 있습니다. –