sql >> Databáze >  >> RDS >> Sqlserver

Proveďte uloženou proceduru v bloku OUTER APPLY

Uložená procedura není navržena pro tento druh použití, protože může provádět jiné operace než výběr dat, může fungovat bez vracení dat nebo může v různých scénářích vracet různé sady.

Na rozdíl od uložených procedur jsou funkce přesně uzpůsobené k použití v souladu s jinými dotazy.

Máte dvě možnosti:

A) Vytvořte skalární funkci, která bude vracet pouze TeacherID a použijte jej ve vašem 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) Vytvořte tabulkovou funkci, která vám může získat všechna potřebná data a můžete se k ní pouze připojit (aplikovat).

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

Zde je nějaké čtení:Rozdíl mezi uloženou procedurou a funkcí na serveru SQL Server




  1. MySQL - Význam PRIMARY KEY, UNIQUE KEY a KEY při společném použití při vytváření tabulky

  2. Indexováno ORDER BY s LIMITEM 1

  3. Příklad zlepšení výkonu dotazů pomocí indexů

  4. Syntaxe for-loop v SQL Server