Opgeslagen procedure is niet ontworpen voor dat soort gebruik, omdat het andere bewerkingen kan uitvoeren dan het selecteren van gegevens, het kan werken zonder gegevens te retourneren of het kan verschillende sets retourneren in verschillende scenario's.
In tegenstelling tot opgeslagen procedures, zijn functies precies geschikt om inline met andere vragen te worden gebruikt.
Je hebt twee opties:
A) Maak een scalaire functie die alleen een TeacherID
. teruggeeft en gebruik het in je 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) Maak een functie met tabelwaarde waarmee u alle benodigde gegevens kunt krijgen en u kunt er gewoon aan deelnemen (toepassen).
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
Hier is wat leesvoer:Verschil tussen opgeslagen procedure en functie in SQL Server