2015-12-16 207 views
0

我設置了一些腳本,用於將XML文件中的數據插入到SQL數據庫中。我收到以下錯誤。SQL Insert Into無法插入NULL

Cannot insert the value NULL into column 'fighterID', table 'MMA  Database.dbo.FIGHTERStemp'; column does not allow nulls. INSERT fails. 

我把fighterID設置爲主鍵並且不允許NULLS。我的意圖是讓它在插入時爲每一行編號。我找到了一個建議將列屬性修改爲標識符的答案。但是,它不會讓我調整列屬性而不刪除並再次添加表。

我可以這麼做 - 但是什麼是SQL語法來設置身份規範設置?我是否以正確的方式去做這件事?

+0

」它不會讓我調整列屬性而不刪除並重新添加表。「你在哪裏看到這個消息?在SSMS? SSMS中有一個設置停止了這個警告。 –

回答

2

這很簡單,只需設置數據類型INT(整數)的字段,並關注它關鍵字IDENTITY。您可以包含seedincrement值;例如從1開始,按1遞增,或者僅使用關鍵字IDENTITY作爲1,1默認值。

CREATE TABLE MMA (FighterID INT IDENTITY (1,1), FighterInfo VARCHAR(MAX)) 
+0

注意:使用'IDENTITY'意味着'NOT NULL',所以不需要指定它 –

+0

工作到完美。謝謝。出於好奇 - 如果這張桌子增長,我不希望fighterID成爲10,560,123 ....設置該列的最佳方式是什麼?也許會生成一個隨機的int/char組合? I.E. fighterID A12B7 –

+0

取決於你想讓FighterID代表什麼,戰鬥機在DB中停留多長時間,它是什麼類型的數據庫等等。但是,有很多不同的方法可以設置它並指定NULL一個無效的「價值」。 –

0

雖然將數據插入到主鍵,您可以檢查值之前的最大ID,然後遞增到下一個值插入新行之前。

在SQL中,您需要在更改其規範之前刪除表。您可以通過備份到臨時表中,然後刪除主表,然後從臨時表中插入數據來做到這一點。 「

+0

此方法存在併發問題,不建議使用 –