Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Gespeicherte Prozedur im OUTER APPLY-Block ausführen

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