代码之家  ›  专栏  ›  技术社区  ›  avenmore

正在更改SQL Server中的标识种子(永久!)

  •  11
  • avenmore  · 技术社区  · 16 年前

    是否有任何方法可以永久更改标识列的标识种子?使用DBCC CHECKIDENT似乎只是设置最后一个_值。如果表被截断,所有值都将被重置。

    dbcc checkident ('__Test_SeedIdent', reseed, 1000)
    
    select name, seed_value, increment_value, last_value
    from sys.identity_columns
    where [object_id] = OBJECT_ID('__Test_SeedIdent');
    

    收益率

    name      seed_value  increment_value  last_value
    -------------------------------------------------
    idIdent   1           1                1000
    

    我希望一些语法

    alter table dbo.__Test_SeedIdent alter column idIdent [int] identity(1000,1) NOT NULL
    

    将存在。

    是否需要创建新列、跨列移动值、删除原始列并重命名新列?

    3 回复  |  直到 12 年前
        1
  •  15
  •   Tom H zenazn    16 年前

    从联机丛书:

    “若要更改原始种子值并重新设置任何现有行,必须删除标识列,然后指定新种子值重新创建该列。当表包含数据时,标识号将添加到具有指定种子和增量值的现有行中。不保证更新行的顺序。”

        2
  •  3
  •   Russell Steen    16 年前

    MSSQL不允许您通过TSQL很容易地在现有列上添加或更改标识。您必须删除列并重新添加它。不用说,这会对FK关系起到地狱般的作用。您可以直接在Enterprise Manager中执行此操作。但是,如果你必须对很多专栏进行这样的操作,那就没有意思了。

    有必要创造一个新的 列,移动值,删除 原始列并重命名 新的?

    是的,别忘了修复/更新所有绑定到该列的索引、外键关系等。

        3
  •  0
  •   Pulsehead    16 年前

    是否需要创建新列、跨列移动值、删除原始列并重命名新列?

    实际上,在EnterpriseManager中,当您向现有表添加ID列(或将int pk字段更改为int pk id)时,它会在场景后面执行此操作。