Gespeicherte Prozeduren sind nicht für diese Art der Verwendung ausgelegt, da sie andere Vorgänge als die Auswahl von Daten ausführen können, ohne Datenrückgabe funktionieren oder in verschiedenen Szenarien unterschiedliche Sätze zurückgeben können.
Im Gegensatz zu gespeicherten Prozeduren sind Funktionen genau dazu geeignet, inline mit anderen Abfragen verwendet zu werden.
Sie haben zwei Möglichkeiten:
A) Erstellen Sie eine Skalarfunktion, die nur eine TeacherID
zurückgibt und verwenden Sie es in Ihrem 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) Erstellen Sie eine Tabellenwertfunktion, die Ihnen alle benötigten Daten liefert, und Sie können einfach beitreten (sich bewerben).
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 ist etwas Lektüre:Unterschied zwischen gespeicherter Prozedur und Funktion in SQL Server