0

我有一个现有的表,我使用现有的列(类型INT)作为 PK,并在插入的每一行时手动增加其值。我想通过自动增量将其更改为 IDENTITY。我在这里找到了一个线程(http://stackoverflow.com/questions/4862385/sql-server-add-auto-increment-primary-key-to-existing-table),它似乎完全实现了我想要的。但是每次我运行 ALTER 语句时,Mgmt Studio 都会崩溃。

我还尝试通过手动更改列属性(身份规范/是身份:是)来实现我的上述目标,就像在这个线程中一样(http://stackoverflow.com/questions/3876785/sql-server-cant-insert-null -进入主键字段)。但是每次更改属性后关闭表格时,都会出现错误

'Pix' 表
无法修改表。
无法将值 NULL 插入列“picID”、表“photo.dbo.Tmp_Pix”;列不允许空值。插入失败。
该语句已终止。

不知道发生了什么。

4

1 回答 1

1

不能将现有列更改为IDENTITY列。

你需要做的是:

  • 创建一个新列INT IDENTITY
  • 删除主键约束
  • 删除旧列
  • 在新列上添加主键约束

问题可能是 - 如果您在该表中已经有数据 - 新的标识值不一定与手动ID列中的旧值匹配。

如果您需要保留这些,那么它会涉及更多:

  • 创建一个具有正确结构的新表,并确保该ID列是INT IDENTITY
  • 打开那张IDENTITY_INSERT桌子
  • 将旧表中的所有行插入新表(在此过程中,将旧ID值插入新的IDIDENTITY 列)
  • 关闭IDENTITY_INSERT该表
  • 放下旧桌子
  • 可能重命名新表
于 2012-02-24T10:10:32.403 回答