SQL基础知识,确定种子溢出

  

<人力资源类=" LW_CollapsibleArea_Hr "/>

调用者必须包含表的模式,或者是一个成员的<强> sysadmin 固定服务器角色,在<强> db_owner 固定数据库角色,或<强> db_ddladmin 固定数据库角色。

<人力资源类=" LW_CollapsibleArea_Hr "/>

下面的例子重置当前标识值,如果需要,指定表的<强> AdventureWorks2012 数据库。


 USE  AdventureWorks2012;,,
  GO ,
  DBCC  CHECKIDENT  (Person.AddressType);,,
  去

下面的示例报告中指定表中的当前标识值<强> AdventureWorks2012 数据库,和不正确的身份价值如果它是不正确的。


 USE  AdventureWorks2012;,,,
  GO ,
  DBCC  CHECKIDENT  (“Person.AddressType”, NORESEED),,,,
  去

下面的示例中的部队当前标识值<代码> AddressTypeID <代码>中的列AddressType 表值10。因为表现有行,下一行插入将使用11作为值,也就是说,当前新增量值定义的列值+ 1。


使用AdventureWorks2012;,
GO 
DBCC CHECKIDENT('的人。AddressType”、补播10);,
GO 


SQL 基础知识 -- identify seed overflow

https://msdn.microsoft.com/en-IN/library/ms176057.aspx 


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

http://www.cnblogs.com/gaizai/archive/2013/04/23/3038318.html

一、背景

  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] ONINSERT INTO [Test_Identity](IdentityId,Name)SELECT 1000,'name1'SET IDENTITY_INSERT [Test_Identity] OFF--隐式插入Id值INSERT INTO [Test_Identity](Name)SELECT 'name2'

SQL 基础知识 -- identify seed overflow

(Figure1:数据记录)

SQL 基础知识 -- identify seed overflow

(Figure2:数据记录)

(三) DBCC CHECKIDENT('table_name', NORESEED)不重置当前标识值。DBCC CHECKIDENT 返回一个报表,它指明当前标识值和应有的标识值。执行下面的SQL语句,返回的信息表示:当前标识值'1001',当前列值'1001',如Figure2所示。

SQL基础知识,确定种子溢出