Lagret procedure er ikke designet til den slags brug, da den kan udføre andre handlinger end at vælge data, den kan fungere uden at returnere data, eller den kan returnere forskellige sæt i forskellige scenarier.
I modsætning til lagrede procedurer er funktioner nøjagtigt egnede til at blive brugt inline med andre forespørgsler.
Du har to muligheder:
A) Opret en skalarfunktion, der kun returnerer et TeacherID
og brug den i din 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) Opret tabel-vurderet funktion, der kan give dig alle de nødvendige data, og du kan bare deltage (ansøge) på den.
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
Her er lidt læsning:Forskel mellem lagret procedure og funktion i SQL Server