这个存储过程应该是:
将userid
和Date
作为输入参数
检查此Id
是否属于教师或学生
如果用户是学生,则应输出他当天的主题以及每个人将讨论的内容。
如果用户是教师,则应输出他当天的课程以及他们在每个课程上的教学内容。
我使用的表格有:WeeklyPlan (Id, Date, Lesson, Plan)
,Subject (Name, Id)
,Student (userid, name, class)
,Teacher (name, userid)
,TimeTable (subject, day, class)
。
现在我写了这个存储过程(它应该执行上面所写的操作),但事实并非如此。
那你请检查一下吗?如果我写错了,请给我一些想法?如果我以另一种方式提出问题,请告诉我。
ALTER PROCEDURE dbo.GetDaySubjects
(
@UserId int,
@DateToday DateTime
)
AS
IF EXISTS(SELECT Std_UserID
FROM Student
WHERE (Std_UserID = @UserId))
BEGIN
SELECT WeeklyPlan.Wkp_Body, WeeklyPlan.Wkp_Date, WeeklyPlan.Wkp_lesson
FROM Class INNER JOIN
Student ON Class.Cls_ID = Student.Std_Class INNER JOIN
TimeTable ON Class.Cls_ID = TimeTable.Ttb_Class INNER JOIN
Subject ON TimeTable.Ttb_Subject = Subject.sbj_ID INNER JOIN
WeeklyPlan ON Subject.sbj_Name = WeeklyPlan.Wkp_lesson
WHERE (WeeklyPlan.Wkp_Date = @DateToday)
END
ELSE IF EXISTS(SELECT Tch_UserID
FROM Teacher
WHERE (Tch_UserID = @UserId))
BEGIN
SELECT TimeTable.Ttb_Class, WeeklyPlan.Wkp_lesson, WeeklyPlan.Wkp_Body, Teacher.Tch_ID
FROM Subject INNER JOIN
TimeTable ON Subject.sbj_ID = TimeTable.Ttb_Subject INNER JOIN
WeeklyPlan ON Subject.sbj_Name = WeeklyPlan.Wkp_lesson INNER JOIN
Teacher ON TimeTable.Ttb_Teacher = Teacher.Tch_ID
WHERE (WeeklyPlan.Wkp_Date = @DateToday)
END
非常感谢你。
答案 0 :(得分:1)
我可以理解您的数据库结构和所需内容。您是否缺少在哪个声明中查询具有此计划的用户。
WHERE (WeeklyPlan.Wkp_Date = @DateToday)
AND Student.Std_UserID=@UserId
第二个:
WHERE (WeeklyPlan.Wkp_Date = @DateToday)
AND Teacher.Tch_UserID = @UserId
但我同意你的问题的评论。所以我认为你可以考虑将这个PROC分成两部分。一个获取Student
,另一个获取Teacher
。然后EXISTS(..)
都已过时了。