SQLServer執行update報子查詢返回的值不止一個?

SQLServer 在執行 update 或者 delete 修改語句時,報如下錯誤 :

[Error Code: 512, SQL State: 21000] 子查詢返回的值不止一個。當子查詢跟隨在 =、!=、<、<=、>、>= 之後,或子查詢用作表示式時,這種情況是不允許的。

導致修改操作失敗,那該怎麼辦呢? 這篇經驗就給你答案!

工具/原料

SQLServer 資料庫

資料庫客戶端軟體 比如 DBVisualizer

方法/步驟

先看看在SQLServer資料庫上對多條記錄執行 update 時報錯

截圖,打算執行一條 update 語句,大概更新 200 條資料記錄,在執行時,報 “子查詢返回的值不止一個。當子查詢跟隨在 =、!=、<、<=、>、>= 之後,或子查詢用作表示式時,這種情況是不允許的” 的錯誤!

注意 : 我使用資料庫客戶端軟體是,DBVisualizer,這款軟體支援我們檢視特定表下的觸發器,這個與本經驗相關, 關於如何安裝這款客戶端軟體,可以參考如下經驗 :

0 如何安裝並破解使用DBVisualizer

SQLServer執行update報子查詢返回的值不止一個

錯誤原因解析

經分析,報錯原因是因為我們的表下定義的某些觸發器導致! 通過 DBVisualizer 我們可以檢視到導致問題出現的觸發器!

SQLServer執行update報子查詢返回的值不止一個

停用觸發器

在觸發器上右鍵,開啟右鍵選單,單擊 "Disable Trigger..." 選單項,在開啟的停用觸發器視窗中,單擊 "Execute" 按鈕即可!

注意 : 如果你不確定哪個或者哪幾個觸發器導致的上述錯誤,則可停用所有觸發器!

SQLServer執行update報子查詢返回的值不止一個

SQLServer執行update報子查詢返回的值不止一個

更新語句執行完成後,將停用的觸發器啟用

再次執行多條記錄的更新語句,這時,語句執行成功

記住,在操作完成後,將停用的觸發器啟用,還是在觸發器上右鍵,開啟右鍵選單,單擊 "EnableTrigger..." 選單項即可!

SQLServer執行update報子查詢返回的值不止一個

SQLServer執行update報子查詢返回的值不止一個

注意事項

如果不確定導致問題的具體觸發器,可以將所有觸發器全部停用

操作完畢後,記得將停用的觸發器啟用!

情況, 錯誤, 表示式, 語句, 報子,
相關問題答案