在主键上设置自动增量而不创建表

时间:2014-08-20 08:25:38

标签: sql sql-server database

我有一个主键未设置为自动增量的表。 如果我尝试设置为自动增量管理工作室将抱怨它不能这样做,因为它需要重新创建表但我不能允许,因为数据是巨大的。 是否可以在不重新创建表的情况下设置自动增量?

2 个答案:

答案 0 :(得分:1)

无法设置自动增量而无需重新创建表格。唯一的选择是您可以删除主键,然后再次创建它。然后设置自动增量。

您可以通过创建临时表table1来尝试这样做:

CREATE TABLE dbo.table1
(
mycolumn INT PRIMARY KEY,
column1 CHAR(10),
column2 CHAR(10)
)

INSERT INTO dbo.table1
SELECT TOP (100) ROW_NUMBER() OVER (ORDER BY (SELECT 0))
FROM master..spt_values v1, master..spt_values v2

将其更改为具有标识列(或多或少是即时)。

BEGIN TRY;
    BEGIN TRANSACTION;

    DECLARE @x nvarchar(max)
    SELECT @x= 
    '
    CREATE TABLE dbo.table2(
        mycolumn INT IDENTITY(' + 
                     CAST(ISNULL(MAX(mycolumn),0)+1 AS VARCHAR) + ',1)  PRIMARY KEY,
        column1 CHAR(10),
        column2 CHAR(10)
        )

        ALTER TABLE dbo.table1 SWITCH TO dbo.table2;
    '       
    FROM dbo.table1
    WITH (TABLOCKX,HOLDLOCK)

    EXEC(@x)

    DROP TABLE dbo.table1;

    EXECUTE sp_rename N'dbo.table2', table1', 'OBJECT';
    COMMIT TRANSACTION;
END TRY
BEGIN CATCH
    IF XACT_STATE() <> 0 ROLLBACK TRANSACTION;
    PRINT ERROR_MESSAGE();
END CATCH;

您可以查看Allow enabling and disabling of a column's IDENTITY property

请记住&#34;打开&#34; IDENTITY:是一个表重建。

答案 1 :(得分:0)

ALTER TABLE [yourTable] DROP COLUMN ID 
ALTER TABLE [yourTable] ADD ID INT IDENTITY(1,1)

这应该可行,你只需要确保列是int。