El procedimiento almacenado no está diseñado para ese tipo de uso, ya que puede realizar operaciones además de seleccionar datos, puede funcionar sin devolver datos o puede devolver un conjunto diferente en diferentes escenarios.
A diferencia de los procedimientos almacenados, las funciones son exactamente adecuadas para usarse en línea con otras consultas.
Tienes dos opciones:
A) Cree una función escalar que devolverá solo un TeacherID
y úsalo en tu WHERE
CREATE FUNCTION udfGetTeacherID
(
@lessonId int, @groupId int
)
RETURNS int
AS
BEGIN
DECLARE @teacherId INT;
SELECT @teacherId = GroupTeachers.TeacherId
FROM GroupTeachers
WHERE [email protected] AND [email protected];
RETURN @teacherId;
END
GO
B) Cree una función con valores de tabla que pueda obtener todos los datos necesarios y simplemente puede unirse (aplicar) en ella.
CREATE FUNCTION udfGetTeacherName
(
@lessonId int, @groupId int
)
RETURNS TABLE
AS
RETURN
(
SELECT t.TeacherLastName, t.TeacherFirstName, t.TeacherMiddleName
FROM Teachers t
INNER JOIN GroupTeachers g ON T.TeacherID = g.TeacherID
WHERE [email protected] AND [email protected]
)
GO
Aquí hay algo de lectura:Diferencia entre procedimiento almacenado y función en SQL Server