MYSQL存儲過程只更新一個記錄,當它應該更新其中的ID IN子句中的所有ID。當我在存儲過程之外運行SELECT和UPDATE時,它工作正常。有什麼建議麼? 1行的影響:>MYSQL存儲過程只記錄更新
CALL update_generic_ids(63, 1258);
更新 -
DELIMITER $$
CREATE PROCEDURE update_ids(IN source int(10),IN target int(10))
BEGIN
DECLARE idList varchar(5000) DEFAULT NULL;
SET idList = (SELECT GROUP_CONCAT(id SEPARATOR ', ') FROM myTable ii WHERE ii.generic_id = source);
UPDATE myTable i SET i.generic_id = target WHERE i.id IN (idList);
END$$
DELIMITER ;
然後,我通過調用它。
在此先感謝,
你看了看錶中看到有多少行實際受到影響?這可能只是您的查詢工具說「1程序執行正常」的方式 –
您是否檢查過'idList'的內容?可能是因爲你只能得到一個結果,或者正如Caius所說,執行了一個程序 – FMashiro
Ps,我不確定你運行單獨測試和程序邏輯的方式是否相同。運行select返回一個包含逗號分隔ID的字符串是一回事,將它複製並粘貼到一個。在你的查詢工具中更新查詢並運行更新,但是你不能將一個包含ID的字符串放入一個變量中,然後將這個單一變量傳遞給列表中的數據庫 - 該數據庫不會將其視爲一個ID號列表。它會將它看作一個充滿數字和逗號的單個字符串。如果你沒有一個字面上是'1,2,3,4'的ID行,那麼查詢將不起作用! –