Съхранената процедура не е предназначена за такъв вид употреба, тъй като може да извършва операции, различни от избиране на данни, може да работи без връщане на данни или може да връща различен набор в различни сценарии.
За разлика от съхранените процедури, функциите са точно подходящи за използване в линия с други заявки.
Имате две възможности:
A) Създайте скаларна функция, която ще върне само TeacherID
и го използвайте във вашия 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) Създайте функция с таблични стойности, която може да ви осигури всички необходими данни и можете просто да се присъедините (кандидатствате) към нея.
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
Ето малко четиво:Разлика между съхранена процедура и функция в SQL Server