【问题标题】:Reset all Identites to 1将所有身份重置为 1
【发布时间】:2012-07-12 09:50:27
【问题描述】:

我已经编写了将所有表的标识重置为 1 的代码,但在某些表中标识不会重置为 1,否则将重置为 0 或 2 或其他数字 这是我的代码

    declare @Count int 
    declare @C int 
    declare @Str varchar(20)
    set @C=1
    set @Count=(select  COUNT(*) TABLE_NAME from INFORMATION_SCHEMA.TABLES )
    while @C<@Count
    BEGIN
        with Records AS(select row_number() over(order by TABLE_NAME) as 'row1', *  
                    from INFORMATION_SCHEMA.TABLES)
        select  @Str=   TABLE_NAME from records
        where row1=@C
        set @C=@C+1
        DBCC CHECKIDENT (@Str , reseed, 0)
    END 

【问题讨论】:

标签: sql-server-2008 identity reset


【解决方案1】:

假设您的所有表格实际上都是空的,这应该适合您。它循环遍历所有定义了IDENTITY(1,1) 的表并重新播种,除了那些从未插入过行或已被截断且不需要重新播种的表。

DECLARE @Name NVARCHAR(1000)
DECLARE @C1 AS CURSOR;

SET @C1 = CURSOR FAST_FORWARD
FOR SELECT Quotename(Object_schema_name(object_id)) + '.' 
                 + Quotename(Object_name(object_id))
    FROM   sys.identity_columns
    WHERE  Objectpropertyex(object_id, 'IsUserTable') = 1
           AND seed_value = 1
           AND increment_value = 1
           AND last_value IS NOT NULL;

OPEN @C1;

FETCH NEXT FROM @C1 INTO @Name;

WHILE @@FETCH_STATUS = 0
  BEGIN
      DBCC CHECKIDENT (@Name, reseed, 0)

      FETCH NEXT FROM @C1 INTO @Name;
  END 

【讨论】:

    【解决方案2】:

    gbn如果自创建表以来没有向表中插入任何行,或者使用 TRUNCATE TABLE 语句删除了所有行,则在运行 DBCC CHECKIDENT 后插入的第一行使用 new_reseed_value 作为标识。否则,插入的下一行使用 new_reseed_value + 当前增量值,但我们想将所有标识重置为 1。有人做过吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-21
      • 1970-01-01
      • 2012-02-06
      • 1970-01-01
      • 1970-01-01
      • 2012-02-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多