sql >> Database >  >> RDS >> Sqlserver

Voer de opgeslagen procedure uit in het OUTER APPLY-blok

Opgeslagen procedure is niet ontworpen voor dat soort gebruik, omdat het andere bewerkingen kan uitvoeren dan het selecteren van gegevens, het kan werken zonder gegevens te retourneren of het kan verschillende sets retourneren in verschillende scenario's.

In tegenstelling tot opgeslagen procedures, zijn functies precies geschikt om inline met andere vragen te worden gebruikt.

Je hebt twee opties:

A) Maak een scalaire functie die alleen een TeacherID . teruggeeft en gebruik het in je 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) Maak een functie met tabelwaarde waarmee u alle benodigde gegevens kunt krijgen en u kunt er gewoon aan deelnemen (toepassen).

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 is wat leesvoer:Verschil tussen opgeslagen procedure en functie in SQL Server




  1. SQL Server Ongeldige kolomnaam na toevoegen nieuwe kolom

  2. Percentage van Count(*) krijgen voor het aantal items in GROUP BY

  3. Hoe de sortering van een database in SQL Server (T-SQL) te tonen

  4. Kan mysql-python (nieuwere versies) niet installeren in Windows