如何以编程方式更改身份列的值?

161

我有一个MS SQL 2005数据库,其中有一个名为Test的表,它有一个ID列。 ID是自增列。

在这个表中,我有一些已经有了其对应ID自增值的行。

现在我想要改变这个表中每个ID的值:

ID = ID + 1

但当我这样做时,我会得到一个错误:

Cannot update identity column 'ID'.

我尝试过这样做:

    ALTER TABLE Test NOCHECK CONSTRAINT ALL 
    set identity_insert ID ON

但这并没有解决问题。

我需要将标识设置为此列,但有时也需要更改值。因此,我的问题是如何完成此任务。

13个回答

1
如果您需要偶尔更改ID,则最好不要使用标识列。过去,我们曾手动实现自动编号字段,使用一个“计数器”表来跟踪每个表的下一个ID。我记得我们这样做是因为标识列在SQL2000中导致了数据库损坏,但有时更改ID对于测试是有用的。

0
非常好的问题,首先我们需要为特定表格打开IDENTITY_INSERT,然后运行插入查询(必须指定列名)。
注意:在编辑标识列之后,不要忘记关闭IDENTITY_INSERT。如果您没有这样做,您将无法编辑任何其他表格的标识列。
SET IDENTITY_INSERT Emp_tb_gb_Menu ON
     INSERT Emp_tb_gb_Menu(MenuID) VALUES (68)
SET IDENTITY_INSERT Emp_tb_gb_Menu OFF

http://allinworld99.blogspot.com/2016/07/how-to-edit-identity-field-in-sql.html


0

我看到了一篇好的文章,帮助我在最后时刻解决了问题。我试图在一个有标识列的表中插入几行数据,但是操作错误,不得不删除。一旦我删除了这些行,我的标识列就发生了变化。我一直在寻找一种更新已插入列的方法,但是没有成功。所以,在谷歌上搜索时,我找到了一个链接...

  1. 删除错误插入的列
  2. 使用开/关标识列的强制插入(如下所述)

http://beyondrelational.com/modules/2/blogs/28/posts/10337/sql-server-how-do-i-insert-an-explicit-value-into-an-identity-column-how-do-i-update-the-value-of-an.aspx


1
不过,我觉得你可能没有真正回答问题。 - Andrew Barber

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接