답변
테이블은 기존 테이블에 AUTO_INCREMENT를 할당 할 수는 없습니다, 처음부터 다시 작성되어야합니다. 이 스크립트를 사용하면 auto_increment로 테이블을 만들고 이전 테이블의 모든 데이터를 새 테이블로 전송하고 이전 테이블을 삭제 한 다음 새 테이블의 이름을 이전 테이블로 바꿉니다.
데이터가 auto_increment 속성과 호환되는지 확인하십시오!
BEGIN TRANSACTION
SET QUOTED_IDENTIFIER ON
SET ARITHABORT ON
SET NUMERIC_ROUNDABORT OFF
SET CONCAT_NULL_YIELDS_NULL ON
SET ANSI_NULLS ON
SET ANSI_PADDING ON
SET ANSI_WARNINGS ON
COMMIT
BEGIN TRANSACTION
GO
CREATE TABLE dbo.Tmp_schema_version
(
version int NULL,
datetime datetime NULL,
comments nvarchar(150) NULL,
id int NOT NULL IDENTITY (1, 1)
) ON [PRIMARY]
GO
ALTER TABLE dbo.Tmp_schema_version SET (LOCK_ESCALATION = TABLE)
GO
SET IDENTITY_INSERT dbo.Tmp_schema_version ON
GO
IF EXISTS(SELECT * FROM dbo.schema_version)
EXEC('INSERT INTO dbo.Tmp_schema_version (version, datetime, comments, id)
SELECT version, datetime, comments, id FROM dbo.schema_version WITH (HOLDLOCK TABLOCKX)')
GO
SET IDENTITY_INSERT dbo.Tmp_schema_version OFF
GO
DROP TABLE dbo.schema_version
GO
EXECUTE sp_rename N'dbo.Tmp_schema_version', N'schema_version', 'OBJECT'
GO
ALTER TABLE dbo.schema_version ADD CONSTRAINT
PK_schema_version PRIMARY KEY CLUSTERED
(
id
) WITH(STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
COMMIT
도움을 주셔서 감사합니다 ... 어쨌든 데이터가 충분하지 않았습니다 ... 그래서 테이블을 떨어 뜨리고 신원 (1,1) 기본 키 ... tc로 다시 만들었습니다. – Mahib
이것은 @Dieter Gobeyn의 해결책과 거의 비슷합니다. 그것은 내가 나중에 따라 갔다.
새로 하나 생성에 이전 테이블에서CREATE TABLE [dbo].[schema_version_new](
[ID] [int] IDENTITY(1,1) NOT NULL,
[Version] [int] NULL,
[DateTime] [datetime] NULL,
[Comments] [nvarchar](150) NULL,
PRIMARY KEY CLUSTERED
(
[ID] ASC
)
) ON [PRIMARY]
GO
복사 모두에 자동 증가와 임시 테이블을 생성; 우리는 이전 테이블에서 의도적으로 ID를 남겨 뒀고 새 테이블에 자동 증가 ID를 넣었으므로 ID를 넣을 필요가 없습니다. 이전 테이블의 ID를 유지해야하는 경우 "SET IDENTITY_INSERT dbo.schema_version_new OFF
"이 필요하며 행을 삽입하는 동안 ID를 포함하고 삽입 한 후에 identity_insert를 다시 켜십시오. "SET IDENTITY_INSERT dbo.schema_version_new ON
". 새로운 삽입을 위해 그것은 자동 ID를 얻을 것이다.
INSERT INTO [schema_version_new]([Version], [Datetime], [Comments])
SELECT [Version], [Datetime], [Comments] FROM [schema_version]
오래된 테이블을 버리십시오.
DROP TABLE [dbo].[schema_version]
GO
새 테이블의 이름을 이전 테이블의 이름으로 바꿉니다.
EXECUTE sp_rename N'dbo.schema_version_new', N'schema_version', 'OBJECT'
GO
은 모두 현재 고유 한 id 열의 값입니까? – paqogomez
여기에서 답변을 결정 했습니까? 당신이 알아야 할 것이 더 있습니까? – paqogomez