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