我尝试了以下方法来重置列的身份种子:
DBCC CHECKIDENT ('dbo.Stuff', RESEED, 0)
这在 sql azure 中不起作用,我想知道这样做的最佳方法是什么。删除并重新创建表?
我尝试了以下方法来重置列的身份种子:
DBCC CHECKIDENT ('dbo.Stuff', RESEED, 0)
这在 sql azure 中不起作用,我想知道这样做的最佳方法是什么。删除并重新创建表?
我认为@haldyr 的答案可能被不公平地删除为正确的。
最新版本的 SQL Azure (v12) 确实支持DBCC CHECKIDENT
(以及其他一些),但是如果您的 azure 数据库服务器不是全新的,您将需要升级。
升级很容易,转到新门户上的 azure DB 服务器(实际服务器不是 DB 本身),然后单击大Latest Update
按钮。
注意:请注意升级有很多注意事项(就像一些旧的东西不支持它),所以它值得阅读文章http://azure.microsoft.com/en-us/documentation/articles/sql-数据库-预览-whats-new/#V12AzureSqlDbPreviewGaTable
如您所见,Windows Azure SQL 数据库当前不支持 DBCC CHECKIDENT。重新设置标识的最完整方法是创建一个具有相同结构的新表,并将标识设置为重新设置的值 IDENTITY(reseedval,1),使用 SET IDENTITY_INSERT 表名 ON 从原始表加载现有记录,然后删除旧表,并重命名新表。重置权限、重置约束等。
我最近自己也遇到了这个问题。我通过在表中插入和删除项目来解决它,直到达到所需的种子值。
在下面的示例中,这将为用户表重新设定种子,因此下一个新项目的 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
希望这可以帮助。