Sql 在主键上设置自动增量,而不重新创建表

Sql 在主键上设置自动增量,而不重新创建表,sql,sql-server,database,Sql,Sql Server,Database,我有一个主键未设置为autoincrement的表。 如果我尝试将is设置为autoincrement Management Studio,它会抱怨它不能这样做,因为它需要重新创建表,但我不能允许这样做,因为数据太大了。 是否可以在不重新创建表格的情况下设置自动增量?您不能在不重新创建表格的情况下设置自动增量。唯一的选择是,您可以删除主键,然后再次创建它。然后设置自动增量 您可以通过创建临时表table1来尝试以下操作: CREATE TABLE dbo.table1 ( mycolumn IN

我有一个主键未设置为autoincrement的表。 如果我尝试将is设置为autoincrement Management Studio,它会抱怨它不能这样做,因为它需要重新创建表,但我不能允许这样做,因为数据太大了。
是否可以在不重新创建表格的情况下设置自动增量?

您不能在不重新创建表格的情况下设置自动增量。唯一的选择是,您可以删除主键,然后再次创建它。然后设置自动增量

您可以通过创建临时表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
将其更改为具有标识列(或多或少是即时的)

开始尝试;
开始交易;
声明@x nvarchar(最大值)
选择@x=
'
创建表dbo.table2(
mycolumn INT标识('+
强制转换(ISNULL(MAX(mycolumn),0)+1作为VARCHAR)+',1)主键,
第1列字符(10),
第2列字符(10)
)
将表dbo.table1切换为dbo.table2;
'       
来自dbo.table1
带(TABLOCKX、HOLDLOCK)
执行官(@x)
删除表dbo.table1;
执行sp_rename N'dbo.table2',table1',OBJECT';
提交事务;
结束尝试
开始捕捉
如果XACT_STATE()0回滚事务;
打印错误消息();
末端捕捉;
你可以查一下

请记住,“打开”标识:是一个表重建

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

这应该行得通,您只需要确保列为int。

替换表。是否保留当前ID?我发现这个解决方案非常令人印象深刻:
ALTER TABLE [yourTable] DROP COLUMN ID 
ALTER TABLE [yourTable] ADD ID INT IDENTITY(1,1)