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

Eseguire la procedura memorizzata nel blocco OUTER APPLY

La stored procedure non è progettata per quel tipo di utilizzo, poiché può eseguire operazioni diverse dalla selezione dei dati, può funzionare senza restituire dati o può restituire set diversi in scenari diversi.

A differenza delle procedure memorizzate, le funzioni sono esattamente adatte per essere utilizzate in linea con altre query.

Hai due opzioni:

A) Creare una funzione scalare che restituirà solo un TeacherID e usalo nel tuo 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) Crea una funzione con valori di tabella che possa fornirti tutti i dati necessari e puoi semplicemente unirti (applicare) su di essa.

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

Ecco alcune letture:Differenza tra stored procedure e funzione in SQL Server