DECLARE @a int = 190;
SELECT IDENTITY(int, @a, 1) AS id, * INTO #temp FROM tablename; -- 錯誤!
-- 1. 先建結構 (不複製資料)
SELECT IDENTITY(int, 1, 1) AS id, * INTO #temp1 FROM tablename WHERE 1=2;
-- 2. 重設種子
DBCC CHECKIDENT('#temp1', RESEED, @a); -- @a = 190
-- 3. 再灌資料
INSERT INTO #temp1 SELECT * FROM tablename;
SELECT * FROM #temp1;
-- 清空表後,讓下一筆從 1 開始
TRUNCATE TABLE mytable; -- 自動重設種子 (最快)
-- 或
DELETE FROM mytable;
DBCC CHECKIDENT('mytable', RESEED, 0); -- 下一筆 = 1
TRUNCATE TABLE 會自動重設 IDENTITY 種子,**最快且記錄最少**DELETE 不重設種子,需手動 DBCC CHECKIDENTRESEED, 0 表示下一個值 = 1 (種子值 + 增量)
DBCC CHECKIDENT('mytable', NORESEED); -- 只報告,不修改
-- 回傳:Current identity value: 190, Current column value: 190
關鍵點:**IDENTITY 函數種子參數必須為常數**;運用 WHERE 1=2 只複製結構 + DBCC CHECKIDENT RESEED + INSERT SELECT 是標準作法。生產環境重設種子需謹慎,確保無外鍵參考衝突。