【问题标题】:Change identity column on SQL Azure更改 SQL Azure 上的标识列
【发布时间】:2013-02-20 19:20:39
【问题描述】:

我有一个作为主键的列,并在 SQL Azure 数据库中设置为标识。

我需要更改种子值(从不同的数字继续),但 Azure 门户的用户界面不允许编辑该字段。我还看到许多帖子表明它无法完成,但它们已经很老了。

那么,能做到吗?

【问题讨论】:

    标签: azure-sql-database


    【解决方案1】:

    实际上,我环顾四周、研究、试验和测试,有一种简单的方法可以做到这一点,但不包括创建新表。它使用这样的脚本:

    SET IDENTITY_INSERT MyTable ON
    GO
    
    INSERT INTO MyTable (IDdata, Field2, Field3)
           VALUES (154337, 'A', 'B')
    GO
    
    SET IDENTITY_INSERT MyTable OFF
    GO
    

    我希望你知道 IDdata 列是我的身份列,我打开了一秒钟然后又关闭了。

    为我完成了这项工作。请分享知识,这样其他人就不必像我一样挣扎。

    【讨论】:

      【解决方案2】:

      您不能在 Azure SQL 中将 DBCC CHECKIDENT 与 RESEED 选项一起使用。您必须使用正确的种子值创建一个新表并将旧数据加载到其中,重命名表,然后删除旧表。

      【讨论】:

      • 嗯,Azure 不允许我在添加数据后将列更改为标识。你试过了吗?有什么办法?
      【解决方案3】:

      我已经设法找到了一个解决方案来更新种子列。

      基本上,添加和删除项目,直到达到正确的 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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-08
        • 1970-01-01
        • 1970-01-01
        • 2012-01-12
        相关资源
        最近更新 更多