一、背景
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标识列)的值,使它重新增长。
当前标识值:current identity value,用于记录和保存最后一次系统分配的Id值;下次分配Id就是:当前标识值+标识增量(通常为+1,也可以自行设置);
当前列值:current column value,这Id值到目前为止的最大值;
二、重置过程
(一) 下面就测试重置Identity标识列,首先使用下面的SQL创建测试表:
--创建测试表 CREATE TABLE [dbo].[Test_Identity]( [IdentityId] [int] IDENTITY(1,1) NOT NULL, [Name] [nchar](10) NULL, CONSTRAINT [PK_testid] PRIMARY KEY CLUSTERED ( [IdentityId] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY]
(二) 显示插入Id值,插入后表[Test_Identity]的记录如Figure1所示,接着再隐式插入Id值,插入后表[Test_Identity]的记录如Figure2所示。
--显示插入Id值 SET IDENTITY_INSERT [Test_Identity] ON INSERT INTO [Test_Identity](IdentityId,Name) SELECT 1000,'name1' SET IDENTITY_INSERT [Test_Identity] OFF --隐式插入Id值 INSERT INTO [Test_Identity](Name) SELECT 'name2'
(Figure1:数据记录)
(Figure2:数据记录)
(三) DBCC CHECKIDENT('table_name', NORESEED)不重置当前标识值。DBCC CHECKIDENT 返回一个报表,它指明当前标识值和应有的标识值。执行下面的SQL语句,返回的信息表示:当前标识值'1001',当前列值'1001',如Figure2所示。
--查询标识值 DBCC CHECKIDENT('Test_Identity', NORESEED) /* 检查标识信息: 当前标识值'1001',当前列值'1001'。 DBCC 执行完毕。如果DBCC 输出了错误信息,请与系统管理员联系。 */
(四) 再隐式插入Id值,插入后表[Test_Identity]的记录如Figure3所示。所以执行上面的SQL语句是不会重置当前标识值的,可以放心执行。
--隐式插入Id值 INSERT INTO [Test_Identity](Name) SELECT 'name3'
(Figure3:数据记录)
--查询标识值 DBCC CHECKIDENT('Test_Identity', NORESEED) /* 检查标识信息: 当前标识值'1002',当前列值'1002'。 DBCC 执行完毕。如果DBCC 输出了错误信息,请与系统管理员联系。 */
以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索sql插入数据的问题
, 数据
, 信息
, identity
, @@IDENTITY
, 标识
, DBCC
, 标识列
, 标识id
, 当前
, Identity列
, CHECKIDENT
, 重置数据库标识
标识值
sql identity 重置、identityserver4、identityserver3、identityserver、sql server identity,以便于您获取更多的相关知识。