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

SQL Server INSERT 錯誤「無法將 NULL 插入身分識別欄」解決方案

     編輯:關於SqlServer

錯誤訊息:不能將值 NULL 插入列 'id',表 'web.dbo.dingdan';列不允許有空值。INSERT 失敗。

原因分析

資料表 dingdan 的 id 欄位定義為 NOT NULL 但未設定 IDENTITY(識別欄)屬性,導致應用程式未提供 id 值時,資料庫嘗試寫入 NULL 而失敗。

解決方法(SSMS 圖形介面)

  1. 物件總管展開資料表 → 右鍵 設計。
  2. 選取 id 欄列。
  3. 下方 資料行屬性 → 識別規格 → 是否為識別欄 設為 是。
  4. 可同步設定 識別種子(起始值,預設 1)與 識別增量(遞增值,預設 1)。
  5. 按 Ctrl+S 儲存(可能需刪除並重建資料表,視資料量而定)。

T-SQL 等效腳本

-- 若資料表為空,可直接 ALTER COLUMN(SQL Server 2016+ 支援)
-- 否則建議重建資料表:
CREATE TABLE dingdan_new (
    id int IDENTITY(1,1) PRIMARY KEY,
    -- 其他欄位...
);
INSERT INTO dingdan_new (col2, col3, ...) SELECT col2, col3, ... FROM dingdan;
DROP TABLE dingdan;
EXEC sp_rename 'dingdan_new', 'dingdan';

驗證

INSERT INTO dingdan (col2, col3) VALUES ('test', 'data');
SELECT * FROM dingdan;  -- id 自動產生 1, 2, 3...

補充說明

  • IDENTITY 欄位插入時不可指定值(除非 SET IDENTITY_INSERT ON)。
  • 若需自訂編號規則(如年份+流水號),建議使用 SEQUENCE (SQL 2012+) 或觸發器/預存程序產生。
  • 遷移既有資料時,務必先備份並規劃停機視窗。

設定識別欄後,應用程式無需傳遞 id 即可正常寫入,避免 NULL 違反約束錯誤。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved