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

时间: 2024-12-12 12:19:38

SQL 重置自增列的值 批量处理的相关文章

sql server 自增列,值突然增大1000的情况

解决方法: 1 打开配置管理器2左面点击sql服务3右面 右键点击SQL Server(MSSQLSERVER) 4点击 启动参数5 在参数 里输入  -T272 点增加 原文地址:https://www.cnblogs.com/superfeeling/p/11774417.html

innodb 自增列重复值问题

1 innodb 自增列出现重复值的问题 先从问题入手,重现下这个bug use test; drop table t1; create table t1(id int auto_increment, a int, primary key (id)) engine=innodb; insert into t1 values (1,2);insert into t1 values (null,2); insert into t1 values (null,2); select * from t1;

开发人员改主键自增列起始值多了个0 !!!

2017-07-23 晚21:21接到开发打来的电话说mysql自增列改大后还能修改吗? 原由:因领导说要保留id 99999和 98888这样的id号 自己用,然后开发就自己改了user_login_account表自增列起始值,开发本想改成100002,然而他多加了一个0,搞成了1000002,这就有点杯具了, 于是开发想试图搞这个值改小成100002,结果改不回来了,他就找到我处理.本想 1 首先和开发沟通后确定影响到了2张表,一个表是user_login_account的自增id列,另一

SQL ID自增列从1开始重新排序

开发了android程序就知道,原生的模拟器启动比较慢,还会出现莫名的问题,这边介绍另外一种模拟器: BlueStacks:BlueStacks是一个可以让Android 应用程序运行在Windows系统(目前,该公司再次宣布推出Mac版Bluestacks模拟器.)上的软件,由BlueStacks公司推出.BlueStacks新版本App Player采用名为Layercake的技术,可以让针对ARM处理器开发的安卓应用运行在基于x86处理器的PC或者平板上,而且可以调用PC的显卡,能提供比A

MyBaits基本操作,为什么session.commit()可以引起事物提交?ResultMap结果映射,执行添加后返回自增列的值,多条件查询,智能标签,工具类

1.为什么session.commit()可以引起事务的提交? 首先打开commit()源码,ctrl+H打开它的实现类DefaultSession,找到它的commit方法 ctrl+左键executor,进入它的接口并打开它的实现类BaseExecutor 在最底层的commit()方法里边进行了事务的提交,所以SqlSession.commit()方法可以引起事务的提交 2.ResultMap结果映射 为什么需要ResultMap? 因为DB中的Table的列名和Java对象中的属性名不一

SQL Server 重置Identity标识列的值(INT爆了)(转载)

一.背景 SQL Server数据库中表A中Id字段的定义是:[Id] [int] IDENTITY(1,1),随着数据的不断增长,Id值已经接近2147483647(int的取值范围为:-2 147 483 648 到 2 147 483 647)了,虽然已经对旧数据进行归档,但是这个表需要保留最近的1亿数据,有什么方法解决Id值就快爆的问题呢? 解决上面的问题有两个办法:一个是修改表结构,把Id的int数据类型修改为bigint:第二个是重置Id(Identity标识列)的值,使它重新增长.

SQL SERVER 自增列的方法

declare @Table_name varchar(60) set @Table_name = ''; if Exists(Select top 1 1 from sysobjects           Where objectproperty(id, 'TableHasIdentity') = 1             and upper(name) = upper(@Table_name)         )     select 1else select 0 -- or if Ex

sql 拼接同列的值

sql中有时需要将列的值转成行的形式,比如下面的数据,具有相同Path的ZumenID有哪一些,该怎么做呢? 常见的做法可以参见这篇文章http://www.cnblogs.com/xiashengwang/p/3503554.html 这里介绍另外一种拼接列的值的方法,利用xml实现.参见这篇文章http://www.cnblogs.com/yuefei/p/3799513.html 不过这里要稍微复杂一点,需要用到子查询.sql如下: select b.path, stuff( replac

Sql Server自增列和delete truncate删除语句关系

定义一个自增列,使用delete后,再插入数据,自增列仍按照删除前的最大值递增:若使用truncate 后,再插入数据,自增列从头开始递增 脚本一(使用delete): create table #test(codes int identity,valuess int) insert into #test(valuess) select 1 select * from #test ---------------- delete from #test ------------------ inse