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 [email protected] AND [email protected];
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 [email protected] AND [email protected]
)
GO
Aqui estão algumas leituras:Diferença entre procedimento armazenado e função no SQL Server