程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> SQL Server如何重置Identity標識列的值

SQL Server如何重置Identity標識列的值

編輯:關於SqlServer

一、背景

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 輸出了錯誤信息,請與系統管理員聯系。
*/

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved