在外实施的时候,经常需要为用户清空所有表中的数据,数据清空后,最好是能够让表中的标识列从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
希望以上方法能给大家带来便利。