SQLServer 在執行 update 或者 delete 修改語句時,報如下錯誤 :
[Error Code: 512, SQL State: 21000] 子查詢返回的值不止一個。當子查詢跟隨在 =、!=、<、<=、>、>= 之後,或子查詢用作表示式時,這種情況是不允許的。
導致修改操作失敗,那該怎麼辦呢? 這篇經驗就給你答案!
工具/原料
SQLServer 資料庫
資料庫客戶端軟體 比如 DBVisualizer
方法/步驟
先看看在SQLServer資料庫上對多條記錄執行 update 時報錯
如截圖,打算執行一條 update 語句,大概更新 200 條資料記錄,在執行時,報 “子查詢返回的值不止一個。當子查詢跟隨在 =、!=、<、<=、>、>= 之後,或子查詢用作表示式時,這種情況是不允許的” 的錯誤!
注意 : 我使用資料庫客戶端軟體是,DBVisualizer,這款軟體支援我們檢視特定表下的觸發器,這個與本經驗相關, 關於如何安裝這款客戶端軟體,可以參考如下經驗 :
0 如何安裝並破解使用DBVisualizer
錯誤原因解析
經分析,報錯原因是因為我們的表下定義的某些觸發器導致! 通過 DBVisualizer 我們可以檢視到導致問題出現的觸發器!
停用觸發器
在觸發器上右鍵,開啟右鍵選單,單擊 "Disable Trigger..." 選單項,在開啟的停用觸發器視窗中,單擊 "Execute" 按鈕即可!
注意 : 如果你不確定哪個或者哪幾個觸發器導致的上述錯誤,則可停用所有觸發器!
更新語句執行完成後,將停用的觸發器啟用
再次執行多條記錄的更新語句,這時,語句執行成功!
記住,在操作完成後,將停用的觸發器啟用,還是在觸發器上右鍵,開啟右鍵選單,單擊 "EnableTrigger..." 選單項即可!
注意事項
如果不確定導致問題的具體觸發器,可以將所有觸發器全部停用
操作完畢後,記得將停用的觸發器啟用!