Uložená procedura není navržena pro tento druh použití, protože může provádět jiné operace než výběr dat, může fungovat bez vracení dat nebo může v různých scénářích vracet různé sady.
Na rozdíl od uložených procedur jsou funkce přesně uzpůsobené k použití v souladu s jinými dotazy.
Máte dvě možnosti:
A) Vytvořte skalární funkci, která bude vracet pouze TeacherID
a použijte jej ve vašem 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) Vytvořte tabulkovou funkci, která vám může získat všechna potřebná data a můžete se k ní pouze připojit (aplikovat).
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
Zde je nějaké čtení:Rozdíl mezi uloženou procedurou a funkcí na serveru SQL Server