如何更改身份规范的表是身份SQL Server

时间:2013-06-25 07:37:18

标签: sql sql-server sql-server-2008


不工作

ALTER TABLE ProductInProduct ALTER COLUMN Id KEY IDENTITY (1, 1);

检查图像

我有一个表ProductInProduct希望它的id应该是唯一的.. enter image description here

3 个答案:

答案 0 :(得分:16)

不能"转换"将现有列添加到IDENTITY列中 - 您必须创建新列作为INT IDENTITY

ALTER TABLE ProductInProduct 
ADD NewId INT IDENTITY (1, 1);

更新

好的,所以 是一种将现有列转换为IDENTITY的方法。如果你绝对需要这个 - check out this response by Martin Smith,并附上所有血腥细节。

答案 1 :(得分:1)

您无法更改现有列的标识。

您有2个选项,

使用identity&创建一个新表删除现有表

使用identity&创建一个新列删除现有列

方法1.(新表)您可以在此处保留新创建的标识列上的现有数据值。

CREATE TABLE dbo.Tmp_Names
    (
      Id int NOT NULL
             IDENTITY(1, 1),
      Name varchar(50) NULL
    )
ON  [PRIMARY]
go

SET IDENTITY_INSERT dbo.Tmp_Names ON
go

IF EXISTS ( SELECT  *
            FROM    dbo.Names ) 
    INSERT  INTO dbo.Tmp_Names ( Id, Name )
            SELECT  Id,
                    Name
            FROM    dbo.Names TABLOCKX
go

SET IDENTITY_INSERT dbo.Tmp_Names OFF
go

DROP TABLE dbo.Names
go

Exec sp_rename 'Tmp_Names', 'Names'

方法2(新列)您无法在新创建的标识列上保留现有数据值。标识列将保留数字序列。

Alter Table Names
Add Id_new Int Identity(1, 1)
Go

Alter Table Names Drop Column ID
Go

Exec sp_rename 'Names.Id_new', 'ID', 'Column'

有关详细信息,请参阅以下Microsoft SQL Server论坛帖子:

http://social.msdn.microsoft.com/forums/en-US/transactsql/thread/04d69ee6-d4f5-4f8f-a115-d89f7bcbc032

答案 2 :(得分:0)

您不必在表格中将值设置为默认值。您应该清除选项"默认值或绑定"第一