2013-09-25 4 views

답변

3

테이블은 기존 테이블에 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 
+0

도움을 주셔서 감사합니다 ... 어쨌든 데이터가 충분하지 않았습니다 ... 그래서 테이블을 떨어 뜨리고 신원 (1,1) 기본 키 ... tc로 다시 만들었습니다. – Mahib

0

이것은 @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