Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Exécuter la procédure stockée dans le bloc OUTER APPLY

La procédure stockée n'est pas conçue pour ce type d'utilisation, car elle peut effectuer des opérations autres que la sélection de données, elle peut fonctionner sans renvoyer de données ou elle peut renvoyer un ensemble différent dans différents scénarios.

Contrairement aux procédures stockées, les fonctions sont parfaitement adaptées pour être utilisées en ligne avec d'autres requêtes.

Vous avez deux options :

A) Créez une fonction scalaire qui renverra uniquement un TeacherID et utilisez-le dans votre 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) Créez une fonction table qui peut vous fournir toutes les données nécessaires et vous pouvez simplement vous y joindre (appliquer).

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

Voici quelques lectures :Différence entre la procédure stockée et la fonction dans SQL Server