Lagrad procedur är inte designad för den typen av användning, eftersom den kan utföra andra operationer än att välja data, den kan fungera utan att returnera data eller så kan den returnera olika uppsättningar i olika scenarier.
Till skillnad från lagrade procedurer är funktioner exakt lämpade att användas i linje med andra frågor.
Du har två alternativ:
A) Skapa en skalär funktion som endast returnerar ett TeacherID
och använd 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) Skapa tabellvärderad funktion som kan ge dig all data som behövs och du kan bara gå med (ansöka) 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
Här är lite läsning:Skillnaden mellan lagrad procedur och funktion i SQL Server