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