2013-10-28 4 views
1

OUTER APPLY 블록에서 저장 프로 시저를 사용할 수없는 이유는 무엇입니까? 저장 프로 시저 dbo.GetTeacherId에서 int 값을 가져와 WHERE 절에 사용해야합니다. 여기 내 코드 :OUTER APPLY 블록에서 저장 프로 시저 실행

USE [StudentsDb] 

DECLARE @teacherIdOut int; 

SELECT StudentLastName, StudentFirstName, StudentMiddleName, LessonName, Score, TLastName, TFirstName, TMiddleName 
FROM  Scores 
JOIN Students 
ON Scores.StudentId=Students.StudentId 
JOIN Lessons 
ON Scores.LessonId=Lessons.LessonId 
OUTER APPLY 
(
    EXECUTE dbo.GetTeacherId 0, 0, @[email protected] -- here I get error 
    SELECT Teachers.TeacherLastName, Teachers.TeacherFirstName, Teachers.TeacherMiddleName 
    FROM Teachers 
    WHERE [email protected] 
)T(TLastName, TFirstName, TMiddleName) 
WHERE Score <=3 

그리고 저장 프로 시저에서 값을 가져 오는 다른 방법이 있습니까? 여기 내 저장 프로 시저 dbo.GetTeacherId :

USE [StudentsDb] 
GO 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
ALTER PROCEDURE [dbo].[GetTeacherId] @lessonId int, @groupId int, @teacherId int OUTPUT 
AS 
BEGIN 
    SET NOCOUNT ON; 
    SELECT @teacherId=GroupTeachers.TeacherId 
    FROM GroupTeachers 
    WHERE [email protected] AND [email protected] 
END 
+1

: 여기

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 

어떤 읽고 있습니다. –

+0

@NenadZivkovic 정말 고마워요! 모든 기능이 작동합니다! 당신의 대답을 나의 인정 된 대답으로 어떻게 확인할 수 있습니까? –

+1

나는 몇 분 안에 대답으로 더 자세한 설명을 쓸 것이므로 그것을 받아 들일 수 있고 다른 사람들이이 질문에 비틀 거리게 할 수있다. –

답변

3
이 작업 다른 다음 선택 데이터를 수행 할 수

저장 프로 시저가이 데이터를 반환하지 않고 작업 할 수 있습니다 또는 다른 시나리오에서 다른 세트를 반환 할 수, 사용의 종류를 위해 설계되지 않았습니다 .

저장 프로 시저와 달리 함수는 다른 쿼리와 인라인으로 사용하기에 적합합니다.

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에서 사용) 여러분 모두를 얻을 수있는 테이블 반환 함수를 작성하는 스칼라 함수를 만듭니다

당신은 두 가지 옵션이 있습니다 데이터가 필요하고 당신은 그것에 합류 (적용) 할 수 있습니다. 당신은 기능의 종류의 함수를 사용해야합니다 Difference between Stored Procedure and Function in SQL Server

+0

서버에 함수를 만들 수있는 권한이 없지만 프로 시저를 만들 수있는 권한이있는 경우 다른 방법이 있습니까? –