2014-09-03 78 views
2

我將數據插入名爲unique_id的標識列的表中。我將unique_id列從插入中移出,假定該值將從列上的標識配置開始播種。SQL Server:「無法將NULL值插入列」 - 關於標識列

Insert聲明:

INSERT INTO table_name (column_1, column_2, column_3, processed_dt) 
VALUES ('A', 'B', 'C', GETDATE()); 

錯誤:

Cannot insert the value NULL into column 'unique_id', table 'db.dbo.table_name'; column does not allow nulls. INSERT fails.

當我雙擊在SQL Server Management Studio中unique_id專欄中,我看到下面的值設置:

  • 身份:真
  • 標識種子:1
  • 標識增量:1

什麼其他的配置可能是錯誤的,導致無法自動使用的標識種子?

UPDATE:

基於一些我看到的建議,我想補充一點,這個架構是由我們從Oracle供應商到SQL Server轉換。我猜測那個過程的一部分必須包括將Oracle Sequences轉換成SQL Server Identity列。與身份專欄「破碎」的東西肯定是一種可能性。

我絕對在正確的數據庫,表和列上。該專欄上的Identity今天沒有創建,它是幾周前創建的。

供應商是否可以採取任何配置來禁用種子值的自動分配並強制開發人員手動「獲取」下一個種子值?

+3

貌似設計者必須要告訴你錯誤信息。要麼是過時的,因爲定義在打開時發生了外部變化,或者您做出了未保存的更改,或者您正在查看錯誤的對象。該列不能具有標識集。 – 2014-09-03 22:53:11

+0

或者在一個觸發器中設置'identity insert'並插入一個顯式爲null的代碼的遠程可能性可能會導致我想這。 – 2014-09-03 22:55:30

+0

@馬丁史密斯說了些什麼。無論是一些微妙的錯誤,還是不尋常的數據庫構件/事件的組合。 – 2014-09-03 23:13:54

回答

0

SQL Server存儲要使用的seed/nextID值。我想知道Oracle的轉換是否忽略了設置該值。嘗試使用該表的下面的命令來檢查什麼它的種子值是:

DBCC CHECKIDENT (table_name, NORESEED) 

也許這實際上是零,這是造成錯誤。然後,您可以使用相同命令的變體「重新設置」或設置下一個要使用的值。

欲瞭解更多信息和選項: http://msdn.microsoft.com/en-us/library/ms176057(v=sql.110).aspx