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