SQL 重置自增列的值 批量处理
Declare @IdentityTable sysname,
@IdentityColumn sysname,
@TotalRows int,
@i int,
@Iden int,
@Sql varchar(4000)
SET NOCOUNT ON
--标识列表
Create Table #IDENTITY_Table
(
SeqID_int int identity(1,1),
IDENTITY_TABLE sysname null,
IDENTITY_COLUMN sysname null,
IDENTITY_MAX int null default(0)
)
Create Table #IDENTITY_Table_Column_Value
(
IDENTITY_MAX int
)
Insert Into #IDENTITY_Table(IDENTITY_TABLE,IDENTITY_COLUMN)
Select --'select IDENT_CURRENT(''' + Obj.name + ''')',
Obj.name,
Col.name
From sys.tables AS Obj left outer join sys.columns AS Col on Obj.object_id = Col.object_id
and Col.is_identity = 1
Where Obj.type = 'U'
and objectproperty(object_id(Obj.name),'TableHasIdentity') = 1;
Set @TotalRows = @@ROWCOUNT;
Set @i = 1;
--循环得到每一个标识列表,然后更新为当前最大标识列值
WHILE(@i <= @TotalRows)
Begin
Select @IdentityTable = IDENTITY_TABLE,
@IdentityColumn = IDENTITY_COLUMN
From #IDENTITY_Table
Where SeqID_int = @i;
Set @Sql = 'Insert into #IDENTITY_Table_Column_Value' + char(10) + 'select max(' + @IdentityColumn + ') + 1 from ' + @IdentityTable;
--print @Sql
EXEC (@Sql);
Select @Iden = IDENTITY_MAX from #IDENTITY_Table_Column_Value;
Set @Iden = IsNull(@Iden,1)
update #IDENTITY_Table
set IDENTITY_MAX = @Iden
where IDENTITY_TABLE = @IdentityTable;
--DBCC CHECKIDENT( @IdentityTable, RESEED, @Iden )
--print @IdentityTable + ',' + cast(@Iden as varchar(10))
Set @i = @i + 1;
Set @Iden = 0
Set @Sql = ''
truncate table #IDENTITY_Table_Column_Value
End
/*
Truncate Table #IDENTITY_Table;
Drop Table #IDENTITY_Table;
truncate table #IDENTITY_Table_Column_Value
drop table #IDENTITY_Table_Column_Value
*/
SET NOCOUNT OFF
-----------------------------------------------
--select 'DBCC CHECKIDENT(' + IDENTITY_TABLE + ',RESEED, ' + cast (IDENTITY_MAX as varchar(10)) + ')' from #IDENTITY_Table
select * from #IDENTITY_Table
SQL 重置自增列的值 批量处理的更多相关文章
- sql server 自增列,值突然增大1000的情况
sql server 自增列,值突然增大1000的情况 解决方法: 1 打开配置管理器2左面点击sql服务3右面 右键点击SQL Server(MSSQLSERVER) 4点击 启动参数5 在参数 ...
- SQL的自增列重置的方法
SQL的自增列挺好用,只是开发过程中一旦删除数据,标识列就不连续了 写起来 也很郁闷,所以查阅了一下标识列重置的方法 发现可以分为三种: --- 删除原表数据,并重置自增列 truncate tabl ...
- sql server自增列值的获取
IDENT_CURRENT(tbname) 是看表对象.所以没有受作用域限制. SCOPE_IDENTITY() 受作用域限制.同一个会话里面不同作用域也会有差异 @@IDENTITY 受会话限制 ...
- innodb 自增列重复值问题
1 innodb 自增列出现重复值的问题 先从问题入手,重现下这个bug use test; drop table t1; create table t1(id int auto_increment, ...
- Sql 重置自动增长列
Sql 重置自动增长列: dbcc checkident(表名, reseed, 0) 使用的情况,一般出现在主外键关联表,导致无法 truncate 只能delete的情况. 此时我们可能会需要重置 ...
- SQLSERVER 自增列,值突然增大1000
SQLSERVER 自增列,值突然增大1000https://blog.csdn.net/lichxi1002/article/details/40074247
- SQL的自增列如何重置
第一种方法:首先去除该列自增的标识,然后再修改id的值,成功修改后,再加上自增标识:如果不修改自增标识,会报错:“无法更新标识列”. 第二种方法:删除该自增列,而后重建一个自增列.
- SQL Server数据库sql语句生成器(SqlDataToScript)的使用(sql server自增列(id)插入固定值)
SqlDataToScript是根据表数据进行生成 Insert Into语句,此工具还有一个好处是可以对自增列插入固定值,例如:自增的列id值为5,但是5这个行值已经删除,如果想存储Id自增列值为5 ...
- SQL SERVER 自增列的方法
declare @Table_name varchar(60) set @Table_name = ''; if Exists(Select top 1 1 from sysobjects ...
随机推荐
- js判断页面是pc打开还是手机打开
<script type="text/javascript"> function browserRedirect() { var sUserAgent = naviga ...
- dubbo-monitor图标功能不显示
原因有3: 1.需要创建目录 2.需要在consumer的配置文件中增加如下配置,使用zk为注册中心 <!-- 监控中心,需要配置以后dubbo-monitor才能生效 --> &l ...
- Nginx启动报错: could not open error log file: open() &q
启动nginx报如下错误: nginx: [alert] could not open error log file: open() "/usr/local/nginx/logs/error ...
- Neural Network学习(一) 最早的感知机:Perceptron of Rosenblatt
1. Frank Rosenblatt 首先介绍的是神经网络的开山祖师,先放张图拜拜 Frank Rosenblatt出生在纽约,父亲是医生,其1956年在Cornell大学拿到博士学位后,留校任教, ...
- BootStrap基本控件
简介 BootStrap是一个用于快速开发web应用程序和网站的前端框架. BootStrap是基于HTML, CSS, JavaScript. BootStrap是由Twitter的Mark Ott ...
- subversion(SVN)安装配置
简介subversion(简称svn)是近年来崛起的版本管理软件系统,是cvs的接班人.目前,绝大多数开源软件都使用svn作为代码版本管理软件.Subversion是一个版本控制系统,相对于的RCS. ...
- Mac下安装 PIL
最近入手MacBook Pro 在配置PIL环境的时候遇到一些问题.现在把解决方式记录下来,希望对有需要的有所帮助. 1. 安装brew : brew 又叫Homebrew,是Mac OSX上的软件 ...
- c++ 中string用c输入输出
对于string自带的函数 c_str()返回的const char*类型,对于scanf函数不能使用,可以通过如下方法使用 string s; scanf("%s",&* ...
- range()和xrange()区别
版本:Python2.7 1.先看帮助说明 (1)range()返回一个递增或递减的数字列表,列表的元素由三个参数决定 start 表示列表开始的值,默认为0 stop 表示列 ...
- ORACLE 获取程序当前位置的方法
FUNCTION f_Get_Program_Position RETURN VARCHAR2 IS l_Owner ); l_Name ); l_Lineno NUMBER; l_Type ); B ...