錯誤訊息:不能將值 NULL 插入列 'id',表 'web.dbo.dingdan';列不允許有空值。INSERT 失敗。
資料表 dingdan 的 id 欄位定義為 NOT NULL 但未設定 IDENTITY(識別欄)屬性,導致應用程式未提供 id 值時,資料庫嘗試寫入 NULL 而失敗。
id 欄列。-- 若資料表為空,可直接 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 違反約束錯誤。