Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2005 在SQL server中更新自动增量列_Sql Server 2005 - Fatal编程技术网

Sql server 2005 在SQL server中更新自动增量列

Sql server 2005 在SQL server中更新自动增量列,sql-server-2005,Sql Server 2005,我需要更改SQLServer2005数据库表的一行中的一个PK值。PK当前是自动递增的 一种可能是暂时从键中删除自动增量,进行修改,然后将其放回原处 数据库正在生产中。有没有一种方法可以在不关闭DB的情况下安全地进行此更改 为什么??我的客户需要一个记录的特定ID 我怕什么?我担心在我修改键时会在数据库中添加记录,而它会在另一个表上以某种方式弄乱索引,该表使用该字段作为FK?我疯了吗?您只能通过删除标识并重新创建来进行更新。但是,您也可以将identity insert设置为ON(),并使用所需

我需要更改SQLServer2005数据库表的一行中的一个PK值。PK当前是自动递增的

一种可能是暂时从键中删除自动增量,进行修改,然后将其放回原处

数据库正在生产中。有没有一种方法可以在不关闭DB的情况下安全地进行此更改

为什么??我的客户需要一个记录的特定ID


我怕什么?我担心在我修改键时会在数据库中添加记录,而它会在另一个表上以某种方式弄乱索引,该表使用该字段作为FK?我疯了吗?

您只能通过删除标识并重新创建来进行更新。但是,您也可以将identity insert设置为ON(),并使用所需的identity val插入新行,禁用ident insert,然后删除旧行。为什么要这样做?

更新不起作用-您必须插入新记录并删除旧记录

set identity_insert mytable on

insert mytable (myidentitycolumn, someothercolumn) 
select 42, someothercolumn
from mytable
where myidentitycolumn = 1;

delete mytable where myidentitycolumn = 1;

set identity_insert mytable off
您可能希望锁定该表,以防止在启用IDENTITY_INSERT时其他插入失败


编辑:废话,我忘记了删除原始记录的明显一点。

matt-你说得对。答案已相应地更新,并且答案也为+1。作为警告,请确保要添加的值不在数据库中。另外,如果包含客户机数据的记录已经存在,则在删除原始记录之前,需要将任何子表中的相关记录移动到新记录。对此使用Update语句。不要忘记,在删除旧行之前,引用此主键的任何表都需要更新为新值。请使用更多信息进行编辑。不鼓励只编写代码和“尝试此”答案,因为它们不包含可搜索的内容,也不解释为什么有人应该“尝试此”。此答案出现在低质量的审阅队列中,可能是因为您没有提供任何代码解释。如果这个代码回答了这个问题,考虑添加一些解释你答案中的代码的文本。这样,你就更有可能获得更多的支持票,并帮助提问者学习新的东西。这段代码甚至不能回答问题。你打算用这个答案回答另一个问题吗?
DECLARE @counter int
SET @counter = 0
UPDATE #tmp_Users
SET @counter = counter = @counter + 1
DECLARE @counter int
SET @counter = 0
UPDATE #tmp_Users
SET @counter = counter = @counter + 1