【问题标题】:How to Alter a table for Identity Specification is identity SQL ServerHow 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 应该是唯一的..

【问题讨论】:

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


【解决方案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

【讨论】:

【解决方案3】:

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

【讨论】:

  • 事实上,您可以将现有列“转换”为 IDENTITY 列;但是您确实需要确保删除任何默认值或绑定!斯兰格瓦!
猜你喜欢
  • 2022-12-27
  • 1970-01-01
  • 2016-02-01
  • 2020-07-01
  • 1970-01-01
  • 2022-12-16
  • 2022-11-20
  • 2011-01-13
  • 1970-01-01
相关资源
最近更新 更多