首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 手動插入識別欄值:SET IDENTITY_INSERT 開關完整指南

     編輯:關於SqlServer

報錯場景

INSERT INTO member (id, username) VALUES (10, 'admin');
-- Msg 544, Level 16, State 1: 
-- Cannot insert explicit value for identity column in table 'member' when IDENTITY_INSERT is set to OFF.

解決方案:臨時開啟 IDENTITY_INSERT

SET IDENTITY_INSERT member ON;      -- 開啟
INSERT INTO member (id, username) VALUES (10, 'admin');  -- 必須顯式列出欄位
SET IDENTITY_INSERT member OFF;     -- 立即關閉

⚠️ 必須遵守的規則

  1. 同一會話同一時間,資料庫內僅允許一張表開啟 IDENTITY_INSERT ON
  2. INSERT 必須顯式指定欄位清單,不能用 INSERT INTO table VALUES (...) 省略欄位
  3. 插入值可任意(不受種子/增量限制),甚至可填補刪除產生的間隙
  4. 完成後立即關閉,避免阻塞其他操作

常見用例

  • 資料遷移/同步:保留源系統主鍵值
  • 測試資料製造:指定特定 ID 滿足業務邏輯
  • 補齊間隙:刪除記錄後手動填入缺失 ID(通常不建議,主鍵無業務含義)

補充:IDENTITY_INSERT 狀態查詢

SELECT OBJECTPROPERTY(OBJECT_ID('member'), 'TableHasIdentity') AS HasIdentity,
       COLUMNPROPERTY(OBJECT_ID('member'), 'id', 'IsIdentity') AS IsIdentityCol;
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved