sql >> Databasteknik >  >> RDS >> Sqlserver

Utför lagrad procedur i OUTTER APPLY-blocket

Lagrad procedur är inte designad för den typen av användning, eftersom den kan utföra andra operationer än att välja data, den kan fungera utan att returnera data eller så kan den returnera olika uppsättningar i olika scenarier.

Till skillnad från lagrade procedurer är funktioner exakt lämpade att användas i linje med andra frågor.

Du har två alternativ:

A) Skapa en skalär funktion som endast returnerar ett TeacherID och använd den i din 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) Skapa tabellvärderad funktion som kan ge dig all data som behövs och du kan bara gå med (ansöka) på den.

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

Här är lite läsning:Skillnaden mellan lagrad procedur och funktion i SQL Server




  1. Använd PDO-satsen flera gånger när du använder flera foreach-loopar

  2. Databasprestanda:filtrering på kolumn kontra separat tabell

  3. PostgreSQL Sqlalchemy commit tar mycket tid

  4. Har någon hittat ett effektivt sätt att lagra BSON ObjectId-värden i en SQL-databas?