Procedura składowana nie jest przeznaczona do tego rodzaju zastosowań, ponieważ może wykonywać operacje inne niż wybieranie danych, może działać bez zwracania danych lub może zwracać różne zestawy w różnych scenariuszach.
W przeciwieństwie do procedur składowanych, funkcje są dokładnie dostosowane do użycia w połączeniu z innymi zapytaniami.
Masz dwie opcje:
A) Utwórz funkcję skalarną, która zwróci tylko TeacherID
i użyj go w swoim 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) Utwórz funkcję o wartościach w tabeli, która dostarczy Ci wszystkich potrzebnych danych i możesz po prostu dołączyć (zastosować) do niej.
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
Oto trochę czytania:Różnica między procedurą składowaną a funkcją w serwerze SQL