【发布时间】:2013-11-06 23:43:26
【问题描述】:
为什么我不能在OUTER APPLY 块中使用存储过程?
我需要从存储过程dbo.GetTeacherId 中获取 int 值并在WHERE 子句中使用它。这是我的代码:
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, @teacherId=@teacherIdOut -- here I get error
SELECT Teachers.TeacherLastName, Teachers.TeacherFirstName, Teachers.TeacherMiddleName
FROM Teachers
WHERE Teachers.TeacherId=@teacherIdOut
)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 GroupTeachers.LessonId=@lessonId AND GroupTeachers.GroupId=@groupId
END
【问题讨论】:
-
你应该使用函数来实现这种功能。
-
@NenadZivkovic 非常感谢!有了这个功能,一切正常!如何确认您的答案是我接受的答案?
-
我会在几分钟内写一个更详细的解释作为答案,所以你可以接受它,并为其他偶然发现这个问题的人提供。
标签: sql sql-server-2008 stored-procedures apply outer-join