使用存储过程检索数据

时间:2012-04-07 09:34:13

标签: sql-server-2008 stored-procedures

这个存储过程应该是:

  1. useridDate作为输入参数

  2. 检查此Id是否属于教师或学生

  3. 如果用户是学生,则应输出他当天的主题以及每个人将讨论的内容。

  4. 如果用户是教师,则应输出他当天的课程以及他们在每个课程上的教学内容。

  5. 我使用的表格有:WeeklyPlan (Id, Date, Lesson, Plan)Subject (Name, Id)Student (userid, name, class)Teacher (name, userid)TimeTable (subject, day, class)

  6. 现在我写了这个存储过程(它应该执行上面所写的操作),但事实并非如此。

    那你请检查一下吗?如果我写错了,请给我一些想法?如果我以另一种方式提出问题,请告诉我。

       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
    

    非常感谢你。

1 个答案:

答案 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(..)都已过时了。