Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Execute o procedimento armazenado no bloco OUTER APPLY


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