不能將值 NULL 插入列 '',表 '';列不允許有 Null 值。INSERT 失敗。

問題描述:
在執行將查詢結果插入已經存在的表中時,報錯如下:

不能將值 NULL 插入列 '列名',表 '要插入的表名';列不允許有 Null 值。INSERT 失敗。

執行的語句如下:

INSERT INTO bitcoin.dbo.CoinbaseTransaction(TransactionHash)
SELECT dbo.BitcoinTransaction.TransactionHash
FROM [bitcoin].[dbo].BitcoinTransaction 
INNER JOIN [CoinbaseTransaction] ON  [bitcoin].[dbo].[CoinbaseTransaction].[BitcoinTransactionId]=[bitcoin].[dbo].BitcoinTransaction.[BitcoinTransactionId]

分析:
原來我要插入的表缺少(key)主鍵,所以在要插入的表中選擇了一個字段作爲主鍵。

但是,增加了選擇一列作爲主鍵後,依然顯示同樣的錯誤。

然後上網搜了一下:
一般EF的主鍵都是系統自動生成的。可能忽略掉了你的顯式賦值。
其實一般的套路是主鍵自增長,然後EF保存時會自動給UID返回數據庫裏的最新值。
你手動維護一個主鍵是很麻煩的事。不建議做

alter table [bitcoin].[dbo].[CoinbaseTransaction] add CoinbaseId bigint

INSERT INTO bitcoin.dbo.CoinbaseTransaction(TransactionHash)
SELECT dbo.BitcoinTransaction.TransactionHash
FROM [bitcoin].[dbo].BitcoinTransaction 
INNER JOIN [CoinbaseTransaction] ON  [bitcoin].[dbo].[CoinbaseTransaction].[BitcoinTransactionId]=[bitcoin].[dbo].BitcoinTransaction.[BitcoinTransactionId]

  • 消息 512,級別 16,狀態 1,第 2 行
    子查詢返回的值不止一個。當子查詢跟隨在 =、!=、<、<=、>、>= 之後,或子查詢用作表達式時,這種情況是不允許的。

先檢查這兩個子查詢select [1YUE] from View_1,和select [LGMC]from View_1是不是在結果集中有好多條記錄。如果有的話用=號就不合適了。應該考慮用in關鍵字或者表的自身連接等方法解決。

發佈了65 篇原創文章 · 獲贊 9 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章