sql >> Base de Datos >  >> RDS >> Sqlserver

Ejecutar el procedimiento almacenado en el bloque OUTER APPLY

El procedimiento almacenado no está diseñado para ese tipo de uso, ya que puede realizar operaciones además de seleccionar datos, puede funcionar sin devolver datos o puede devolver un conjunto diferente en diferentes escenarios.

A diferencia de los procedimientos almacenados, las funciones son exactamente adecuadas para usarse en línea con otras consultas.

Tienes dos opciones:

A) Cree una función escalar que devolverá solo un TeacherID y úsalo en tu 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) Cree una función con valores de tabla que pueda obtener todos los datos necesarios y simplemente puede unirse (aplicar) en ella.

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

Aquí hay algo de lectura:Diferencia entre procedimiento almacenado y función en SQL Server