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 错误消息。顺便说一句:“unique 和 identity 是两个不同的概念。使列成为标识列并不一定使其唯一(也没有强制唯一性) 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