11

不工作

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

检查图像

我有一个表 ProductInProduct 是希望它的 id 应该是唯一的..在此处输入图像描述

4

3 回答 3

17

不能将现有列“转换”为IDENTITY列 - 您必须创建一个INT IDENTITY

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

更新:

好的,所以有一种方法可以将现有列转换为IDENTITY. 如果您绝对需要这个 -请查看 Martin Smith的回复以及所有血淋淋的细节。

于 2013-06-25T08:25:19.493 回答
1

您不能更改现有的身份列。

你有2个选择,

创建具有标识的新表并删除现有表

创建具有标识的新列并删除现有列

方法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

于 2013-06-25T12:28:59.183 回答
1

您没有在表中将值设置为默认值。您应该首先清除“默认值或绑定”选项。

于 2014-07-21T05:09:17.893 回答