SQL Server将列转换为标识列

时间:2010-09-01 09:53:23

标签: tsql sql-server-2008

我正在使用SQL Server 2008.一个int列我用作主键但不是标识列(其值将自动增加1)。我想将此列转换为标识列。任何解决方案?

提前谢谢, 乔治

2 个答案:

答案 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.