zoukankan      html  css  js  c++  java
  • 利用SQL语句重置数据库中所有表的标识列(自增量)

    可以应用于2种场景:

    1.清空所有表中的数据,数据清空后,最好是能够让表中的标识列从1开始记数,所以要重置标识列的当前值。

    2.用复制的方式,发布订阅同步数据之后,订阅端的数据不会自动增长,比如自增ID该9527了,但如果中间有跳过的ID,会自动填充缺失的路过的ID,该执行如下代码,即可从应该的9527开始增长。

    declare @tablename varchar(50) 
    declare @sql varchar(1000)
    declare cur cursor for select name from sys.tables 
    open cur
    fetch next from cur into @tablename
    while @@fetch_status=0
    begin
    set @sql='if (select count(1) from '+@tablename+')<=0 and exists(select * from sys.columns where is_identity=1 and object_id=object_id('''+@tablename+'''))
    begin
    --dbcc checkident('+@tablename+',reseed,1)
    dbcc checkident('+@tablename+',reseed)
    end'
    exec (@sql)
    fetch next from cur into @tablename 
    end 
    close cur
    deallocate cur

     测试过没有问题的

    --已经测试没有问题的生成有标识列(自增ID)的表名
    declare @tablename varchar(50) 
    declare @sql varchar(1000)
    declare @objiecid int
    declare cur cursor for select object_id from sys.columns where is_identity=1  
    open cur
    fetch next from cur into @objiecid
    while @@fetch_status=0
    begin
    select @tablename=name from sys.tables where object_id=@objiecid
    --print @tablename
    print 'dbcc checkident('''+@tablename+''',reseed)'
    fetch next from cur into @objiecid 
    end 
    close cur
    deallocate cur
  • 相关阅读:
    ASP.NET进阶(3):调用Javascript
    CMS系统模版引擎设计(3):Label基类的设计
    CMS系统模版引擎设计(1):基础类型
    CMS系统模板引擎设计(5):Label应用初探
    Thread系列——WaitHandle
    Thread系列——AutoResetEvent
    关于lock
    仅允许程序运行一个实例代码实现
    Thread系列——ManualResetEvent
    Thread系列——Thread.Join()
  • 原文地址:https://www.cnblogs.com/davidhou/p/4769317.html
Copyright © 2011-2022 走看看