Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Изпълнете съхранена процедура в блок OUTER APPLY

Съхранената процедура не е предназначена за такъв вид употреба, тъй като може да извършва операции, различни от избиране на данни, може да работи без връщане на данни или може да връща различен набор в различни сценарии.

За разлика от съхранените процедури, функциите са точно подходящи за използване в линия с други заявки.

Имате две възможности:

A) Създайте скаларна функция, която ще върне само TeacherID и го използвайте във вашия 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) Създайте функция с таблични стойности, която може да ви осигури всички необходими данни и можете просто да се присъедините (кандидатствате) към нея.

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

Ето малко четиво:Разлика между съхранена процедура и функция в SQL Server




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да добавя персонализирани атрибути към SQL низ за връзка?

  2. Статистика за използване на индекса на SQL Server

  3. Бази данни на SQL Server Статистика за използване на процесора

  4. Сравнете стойността на множество колони от две различни бази данни

  5. Как да създадете функция на SQL Server, за да обедините множество редове от подзаявка в едно ограничено поле?