O procedimento armazenado não foi projetado para esse tipo de uso, pois pode executar outras operações além da seleção de dados, pode funcionar sem retornar dados ou pode retornar conjuntos diferentes em diferentes cenários.
Ao contrário dos procedimentos armazenados, as funções são exatamente adequadas para serem usadas em linha com outras consultas.
Você tem duas opções:
A) Crie uma função escalar que retornará apenas um
TeacherID e use-o em seu WHERE CREATE FUNCTION udfGetTeacherID
(
@lessonId int, @groupId int
)
RETURNS int
AS
BEGIN
DECLARE @teacherId INT;
SELECT @teacherId = GroupTeachers.TeacherId
FROM GroupTeachers
WHERE example@sqldat.com AND example@sqldat.com;
RETURN @teacherId;
END
GO
B) Crie uma função com valor de tabela que possa obter todos os dados necessários e você pode apenas juntar (aplicar) nela.
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 example@sqldat.com AND example@sqldat.com
)
GO
Aqui estão algumas leituras:Diferença entre procedimento armazenado e função no SQL Server