【发布时间】:2013-02-20 19:20:39
【问题描述】:
我有一个作为主键的列,并在 SQL Azure 数据库中设置为标识。
我需要更改种子值(从不同的数字继续),但 Azure 门户的用户界面不允许编辑该字段。我还看到许多帖子表明它无法完成,但它们已经很老了。
那么,能做到吗?
【问题讨论】:
我有一个作为主键的列,并在 SQL Azure 数据库中设置为标识。
我需要更改种子值(从不同的数字继续),但 Azure 门户的用户界面不允许编辑该字段。我还看到许多帖子表明它无法完成,但它们已经很老了。
那么,能做到吗?
【问题讨论】:
实际上,我环顾四周、研究、试验和测试,有一种简单的方法可以做到这一点,但不包括创建新表。它使用这样的脚本:
SET IDENTITY_INSERT MyTable ON
GO
INSERT INTO MyTable (IDdata, Field2, Field3)
VALUES (154337, 'A', 'B')
GO
SET IDENTITY_INSERT MyTable OFF
GO
我希望你知道 IDdata 列是我的身份列,我打开了一秒钟然后又关闭了。
为我完成了这项工作。请分享知识,这样其他人就不必像我一样挣扎。
【讨论】:
您不能在 Azure SQL 中将 DBCC CHECKIDENT 与 RESEED 选项一起使用。您必须使用正确的种子值创建一个新表并将旧数据加载到其中,重命名表,然后删除旧表。
【讨论】:
我已经设法找到了一个解决方案来更新种子列。
基本上,添加和删除项目,直到达到正确的 Id。在下面的示例中,这将为用户表重新设定种子,因此下一个新项目的 Id 为 3500。
BEGIN TRANSACTION
GO
DECLARE @max_id int
SELECT @max_id = max([Id]) FROM users
WHILE (@max_id < 3499)
BEGIN
INSERT INTO Users (Username, Password) VALUES ('','')
SELECT @max_id = max([Id]) FROM Users
DELETE FROM Users WHERE [Id] = @max_id
END
COMMIT
【讨论】: