如何在SQL Server中更改自动生成的ID键

20 浏览
0 Comments

如何在SQL Server中更改自动生成的ID键

我有一个SQL Server数据库,我想更改标识列,因为它以一个大数字10010开始,并且与另一个表相关联。现在我有200条记录,我希望在记录增加之前解决这个问题。如何最好地更改或重置这一列?

0
0 Comments

如何在SQL Server中更改自动生成的ID键

在SQL Server中更改自动生成的ID键可能会遇到一些困难,并且不建议这样做,因为可能存在与其关联的外键。以下是一些步骤来执行此操作:

1. 备份表格的数据。

2. 选择要更改的表的设计视图。

3. 关闭自动生成的ID列。

4. 执行更新查询。

5. 重新打开自动生成的ID列。

请注意,更改自动生成的ID键可能会导致其他数据库中的间接外键、已发布的报表、硬编码的网络链接等引用原始标识符的功能中断。因此,在执行此操作时,建议谨慎操作,确保没有使用原始标识符发布的报表、网络链接等。

如果表中已经存在数据,则可能会出现需要删除和重新创建表的错误。

参考链接:http://blog.sqlauthority.com/2009/05/03/sql-server-add-or-remove-identity-property-on-column/

0
0 Comments

问题:如何在SQL Server中更改自动生成的ID键?

原因:有时候需要手动更改自动生成的ID键,可能是为了调整数据的顺序或者满足特定的需求。

解决方法:可以通过以下步骤来更改自动生成的ID键:

1. 首先,需要将表的identity_insert属性设置为ON,以允许手动插入ID值:

set identity_insert YourTable ON

2. 然后,删除需要更改ID的记录。

3. 接下来,重新插入记录,并为其指定不同的ID值。

4. 插入完成后,不要忘记将identity_insert属性设置为OFF,以恢复自动生成的ID键:

set identity_insert YourTable OFF

这种方法比直接关闭自动生成ID功能更安全和简便。虽然关闭自动生成ID功能可能更危险,有时也无法实现,但它允许更新ID列的值。

以上就是在SQL Server中更改自动生成的ID键的方法。通过设置identity_insert属性为ON,然后删除并重新插入记录,并在插入时手动指定ID值,最后将identity_insert属性设置为OFF,即可实现更改自动生成的ID键的目的。这种方法相较于直接关闭自动生成ID功能更为安全和简便。

0
0 Comments

如何在SQL Server中更改自动生成的ID键

在SQL Server中,无法更新自动生成的ID列,这与可以使用更新语句更新其他列的情况不同。

虽然有一些替代方法可以实现类似的要求。

当需要更新新记录的自动生成ID列值时,可以使用DBCC CHECKIDENT,它检查表的当前自动生成ID值,并在需要时更改自动生成ID值。

DBCC CHECKIDENT('tableName', RESEED, NEW_RESEED_VALUE)

当需要更新现有记录的自动生成ID列值时,可以使用IDENTITY_INSERT,它允许将显式值插入到表的自动生成ID列中。

SET IDENTITY_INSERT YourTable {ON|OFF}

示例:

-- 打开Identity insert,以便可以向该列插入值
SET IDENTITY_INSERT YourTable ON
GO
-- 插入要更新自动生成ID列的记录的副本
INSERT INTO YourTable(IdentityCol, otherCol) VALUES(13,'myValue')
GO
-- 删除已插入的旧行(确保外键)
DELETE FROM YourTable WHERE ID=3
GO
-- 现在关闭Identity insert,返回到之前的状态
SET IDENTITY_INSERT YourTable OFF

DBCC可以重置下一个新记录,但我现在想要更改现有记录,你能给个例子吗?

这不是更新现有自动生成ID的方法,而是手动插入。

是的,这是实现此目的的最佳方法。您无法像更新普通列那样更新自动生成ID列。

这个问题的接受答案并没有回答这个问题,即如何更新自动生成的ID列(例如,UPDATE YourTable SET IdentityCol = 13)。SET IDENTITY_INSERT YourTable ON只允许插入,而不是更新。

我认为用“您无法...”来回答一个“如何...”的问题并不实用,至少不要将其评为最佳答案,因为它并没有解决问题。来自的回答解决了问题,即使这不是一个简单的操作或不推荐的设计。

它确实回答了问题,即无法使用更新来实现,并展示了如何进行操作。多读点吧。

记住:在插入(和选择)中必须声明所有字段。

0