欢迎来到.net学习网

欢迎联系站长一起更新本网站!QQ:879621940

您当前所在位置:首页 » Sql随手笔记 » 正文

热门阅读

利用SQL语句重置数据库中所有表的标识列(自增量)

创建时间:2011年11月24日 11:46  阅读次数:(11758)
分享到:
在外实施的时候,经常需要为用户清空所有表中的数据,数据清空后,最好是能够让表中的标识列从1开始记数,所以要重置标识列的当前值。我们可以利用 dbcc checkident来重置表的标识列,但一次只能重置一个表的标识列,所在就想到了游标,我们可以利用游标来循环执行dbcc checkident语句,这样就可以重置数据库中所有表的标识列了。

关于dbcc checkident的用法,可以参考本站:
重置SqlServer表的自增列,让自增列重新开始记数

在这之前,我们首先要获取两个信息:
1,获取到数据库中所有表信息,这个可以用select * from sys.tables来实现。
2,要判断表中是否有标识列,可以用如下sql来查询:
select * from sys.columns where is_identity=1 and object_id=object_id('表名')

关于如何获取到数据库所有表的更多方法,请查看本站:
利用SQL语句查询数据库中所有表

得到必要的两个信息后,我们就可以写游标来重置数据库中所有表的标识列了,sql如下:
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)
end'

exec (@sql)

fetch next from cur into @tablename
end
close cur
deallocate cur


希望以上方法能给大家带来便利。
来源:.net学习网
说明:所有来源为 .net学习网的文章均为原创,如有转载,请在转载处标注本页地址,谢谢!
【编辑:Wyf

打赏

取消

感谢您的支持,我会做的更好!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

最新评论

共有评论1条
  • #1楼  评论人:匿名  评论时间:2013-8-15 10:05:54
  • hao feichanghao
发表评论:
留言人:
内  容:
请输入问题 40+39=? 的结果(结果是:79)
结  果: