星期日, 8月 20, 2023

[SQL] 重置 identity

Line 社群上討論,讀官方文件 - DBCC CHECKIDENT 才發現,原來 DBCC CheckIdent 除了查詢目前 identity 跑到哪外,還有可以進行重置動作,以下模擬問題弄個簡易範例來紀錄

DBCC CheckIdent 重置參數

RESEED 參數
Specifies that the current identity value should be changed.
new_reseed_value 參數
The new value to use as the current value of the identity column.
模擬問題的 TSQL 範例
DROP TABLE IF EXISTS tblIdentity

CREATE TABLE [dbo].[tblIdentity](
	[ID] [int] IDENTITY(100,1) NOT NULL, -- 不是從 1 開始跑
	[ExecuteTime] [datetime] NULL,
 CONSTRAINT [PK_tblIdentity] PRIMARY KEY CLUSTERED 
(
	[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO

-- insert 5 筆資料
INSERT INTO tblIdentity (ExecuteTime) VALUES(GETDATE())
GO 5

-- 重置:從 0 開始跑
DBCC CheckIdent('tblIdentity', RESEED, 0)

-- 再 insert 5 筆資料就好
INSERT INTO tblIdentity (ExecuteTime) VALUES(GETDATE())
GO 5

-- 查詢目前資料
SELECT * FROM tblIdentity

使用 DBCC CheckIdent 會出現下述訊息


查詢 insert 10 筆資料,從 ExecuteTime 可以得知,DBCC CheckIdent 重置後的 ID 序號有從 0 開始跑



官方範例 - Reset the identity value on an empty table

[SQL] DELETE 和 TRUNCATE 內有紀錄使用 truncate 會重置 identity,Delete 本身沒有重置 identity 功能,但在官方範例 - Reset the identity value on an empty table 則是提出使用 Delete 刪除 Table 內全部資料後,可以透過 DBCC CheckIdent 來讓 identity 重置的做法,TSQL 示意
DELETE FROM TableName
GO
DBCC CHECKIDENT ('TableName', RESEED, 0);
GO

沒有留言:

張貼留言