如何在Sql Azure中重置身份种子

时间:2012-09-13 22:03:30

标签: c# sql entity-framework azure-sql-database

我尝试了以下方法来重置我的列的标识种子:

DBCC CHECKIDENT ('dbo.Stuff', RESEED, 0)

这在sql azure中不起作用,我想知道这样做的最佳方法是什么。删除并重新创建表?

3 个答案:

答案 0 :(得分:9)

我认为@ haldyr的答案可能被不公平地删除了。

最新版本的SQL Azure(v12)支持DBCC CHECKIDENTand a bunch of others)但是如果您的azure数据库服务器不是全新的,则需要升级。

升级很简单,在新门户(实际服务器而不是数据库本身)上转到您的Azure数据库服务器,然后单击大Latest Update按钮。

enter image description here

注意:请注意升级有一些警告(就像一些较旧的东西并不支持它),因此值得阅读文章http://azure.microsoft.com/en-us/documentation/articles/sql-database-preview-whats-new/#V12AzureSqlDbPreviewGaTable

答案 1 :(得分:6)

如您所见,DBCC CHECKIDENT is not currently supported in Windows Azure SQL Database。重新设置标识的最完整方法是创建一个具有相同结构的新表,并将标识设置为Reseed值IDENTITY(reseedval,1),使用SET IDENTITY_INSERT tablename ON从原始表加载现有记录,然后删除旧表,并重命名新表。重置权限,重置约束等

答案 2 :(得分:0)

我最近自己遇到了这个问题。我通过插入和删除表中的项目来解决它,直到我达到所需的种子值。

在下面的示例中,这将重新设置Users表,以便下一个新项目的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

希望这有帮助。