WHILE
はい、これはループとして、または として実装できますCURSOR
。この場合、基本的に同じこと、つまり行ごとの操作を行うためです。
ただし、理想的な解決策は、失敗したストアド プロシージャを再実装して、Student_Fail
手続き型ではなくセット ベースにすることです。
たとえば、テーブル値パラメーターを受け入れるようにストアド プロシージャを変更できます。
まず、テーブル タイプを作成します。
CREATE TYPE dbo.StudentClassTableType AS TABLE
( StudentID int, Class varchar(50) )
次に、テーブル タイプを受け入れるようにストアド プロシージャを変更 (または新しいストアド プロシージャを作成) します。
CREATE PROCEDURE dbo.usp_FailStudents
(@tvpStudentsToFail dbo.StudentClassTableType READONLY)
-- Perform set-based logic using your table parameter.
UPDATE sc
SET Fail = 1
FROM dbo.StudentClass sc
JOIN @tvpStudentsToFail fail
ON fail.StudentID = sc.StudentID
AND fail.Class = sc.Class