質問とクイズの 2 つのテーブルがあります。
クイズは質問のコレクションです。
クイズの表は次のようになります。
QuizdId | QuestionId (NVARCHAR50)
1 | 1,2,3,4,5
2 | 6,7,8,9
質問テーブルには、主キー ID (整数)、質問、およびステータス フィールドがあります。
問題テーブルのすべての問題のステータスを更新する手順を書きたいと思います。
次のクエリは SQL コンソールで機能します
UPDATE questions SET ActiveStatus = 'X'
WHERE FIND_IN_SET(ID, (SELECT QuestionIds from quiz where QuizId = 2)) > 0
ここでは 4 行が更新されます。
しかし、同じクエリをストアド プロシージャに入れてパラメータを指定して実行すると、機能しません。
ストアド プロシージャ コード:
CREATE DEFINER=`root`@`localhost`
PROCEDURE `update_quiz_status`(IN `QuizId` INT, IN `Status` VARCHAR(1))
MODIFIES SQL DATA
SQL SECURITY INVOKER
UPDATE questions SET ActiveStatus = Status
WHERE FIND_IN_SET(ID, (SELECT QuestionIds from quiz where QuizId = QuizId)) > 0
プロシージャに構文エラーはありません。
SQL コンソールからプロシージャを呼び出すと、次のエラーが表示されます。
call update_quiz_status(2,'X');
エラー : #1242 - サブクエリが複数の行を返します
クエリが SQL コンソールでは機能するのに、ストアド プロシージャでは機能しない理由がわかりません。
これを達成できる他の方法はありますか?つまり、SQL プロシージャによって特定のクイズの質問ステータスを更新します。