sql >> Database teknologi >  >> RDS >> Sqlserver

Udfør den lagrede procedure i den YDRE APPLY-blok

Lagret procedure er ikke designet til den slags brug, da den kan udføre andre handlinger end at vælge data, den kan fungere uden at returnere data, eller den kan returnere forskellige sæt i forskellige scenarier.

I modsætning til lagrede procedurer er funktioner nøjagtigt egnede til at blive brugt inline med andre forespørgsler.

Du har to muligheder:

A) Opret en skalarfunktion, der kun returnerer et TeacherID og brug den i din 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) Opret tabel-vurderet funktion, der kan give dig alle de nødvendige data, og du kan bare deltage (ansøge) på den.

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

Her er lidt læsning:Forskel mellem lagret procedure og funktion i SQL Server




  1. Får sidst indsat UniqueId fra MySQL

  2. PostgreSQL GROUP_CONCAT() ækvivalent

  3. Hvordan kan jeg få returværdien fra SQL Server-systemmeddelelsen?

  4. Hukommelseseffektiv måde at læse BLOB-data i C#/SQL 2005