我正在使用SQL Server 2008.一个int列我用作主键但不是标识列(其值将自动增加1)。我想将此列转换为标识列。任何解决方案?
提前谢谢, 乔治答案 0 :(得分:6)
很遗憾,您无法将字段更改为现有表格上的IDENTITY
。
你应该:
IDENTITY
字段SET IDENTITY_INSERT ON
新表格SET IDENTITY_INSERT OFF
新表格您可以使用SSMS
更改字段类型,它将在幕后为您完成所有这些操作。
这是一个示例表:
CREATE TABLE plain (id INT NOT NULL PRIMARY KEY)
INSERT
INTO plain
VALUES (1000)
和SSMS
生成的脚本:
SET ANSI_PADDING ON
SET ANSI_WARNINGS ON
COMMIT
BEGIN TRANSACTION
GO
CREATE TABLE dbo.Tmp_plain
(
id int NOT NULL IDENTITY (1, 1)
) ON [PRIMARY]
GO
ALTER TABLE dbo.Tmp_plain SET (LOCK_ESCALATION = TABLE)
GO
SET IDENTITY_INSERT dbo.Tmp_plain ON
GO
IF EXISTS(SELECT * FROM dbo.plain)
EXEC('INSERT INTO dbo.Tmp_plain (id)
SELECT id FROM dbo.plain WITH (HOLDLOCK TABLOCKX)')
GO
SET IDENTITY_INSERT dbo.Tmp_plain OFF
GO
DROP TABLE dbo.plain
GO
EXECUTE sp_rename N'dbo.Tmp_plain', N'plain', 'OBJECT'
GO
ALTER TABLE dbo.plain ADD CONSTRAINT
PK__plain__3213E83F1A609306 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 :(得分:2)
转到sql server中对象资源管理器中的表对象,右键单击表示修改,然后单击要转换为标识的主键字段,而不是下面你会看到列属性,那里有你需要改变为(Is Identity)是和Idendity Increment 1.