Да, это может быть реализовано в виде WHILE
цикла, или как CURSOR
, так как в этом случае они будут делать по существу то же самое, пошаговая операция.
Однако идеальным решением было бы повторное внедрение процедуры хранения с ошибкой Student_Fail
, чтобы сделать ее установленной, а не процедурной.
Например, вы можете изменить хранимую процедуру, чтобы принять table-valued parameter.
Во-первых, создать тип таблицы:
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