How to Alter a table for Identity Specification is identity SQL Server

Posted

技术标签:

【中文标题】How to Alter a table for Identity Specification is identity SQL Server【英文标题】: 【发布时间】:2013-06-25 07:37:18 【问题描述】:

不工作

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

检查图片

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

【问题讨论】:

Not working 不是有效的 SQL Server 错误消息。顺便说一句:“uniqueidentity 是两个不同的概念。使列成为标识列并不一定使其唯一(也没有强制唯一性) How to add identity to the column in SQL Server? 或 ***.com/questions/16188278 的可能重复 how to set auto increment after creating a table without any data loss? 的可能副本。我更喜欢这个,因为它展示了一种不需要大量数据移动的方法。 【参考方案1】:

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

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

更新:

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

【讨论】:

马丁史密斯喜欢指出,可以使用SWITCH 据 here 记录,使用 SWITCH 时不考虑 IDENTITY 属性。并由 Microsoft 员工 here 发布【参考方案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

【讨论】:

投反对票,因为这是其他人的副本/过去答案:***.com/a/1049305/307699【参考方案3】:

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

【讨论】:

事实上,您可以将现有列“转换”为 IDENTITY 列;但是您确实需要确保删除任何默认值或绑定!斯兰格瓦!

以上是关于How to Alter a table for Identity Specification is identity SQL Server的主要内容,如果未能解决你的问题,请参考以下文章

How To Convert A Partitioned Table To A Non-Partitioned Table Using DataPump In 11g (Doc ID 1276049.

转 How to Find Out Who Is Locking a Table in MySQL

How do I see all foreign keys to a table or column?

OGG How to Resync Tables / Schemas on Different SCN s in a Single Replicat

How to download apk for google play online?

How to search for a part of a word with ElasticSearch.md