2

このストアドプロシージャは次のようになっています。

  1. useridおよびDateを入力パラメータとして使用します

  2. Idこれが教師のものか生徒のものかを確認してください

  3. ユーザーが学生の場合は、その日の主題と、それぞれが話し合う内容を出力する必要があります。

  4. ユーザーが教師の場合は、その日のクラスと、各クラスで教える内容を出力する必要があります。

  5. 私が使用するテーブルは次の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

どうもありがとう。

4

1 に答える 1

1

あなたのデータベース構造とあなたが望むものについて私が理解できること。このスケジュールを持っているユーザーを特定するためのwhereステートメントが欠落しているということですか。

WHERE        (WeeklyPlan.Wkp_Date = @DateToday) 
             AND Student.Std_UserID=@UserId

そして2番目のもの:

WHERE        (WeeklyPlan.Wkp_Date = @DateToday)
             AND Teacher.Tch_UserID = @UserId

しかし、私はあなたの質問のコメントに同意します。したがって、このPROCを2つに分割することを検討してください。1つはをフェッチしStudent、もう1つはをフェッチしTeacherます。その後、両方EXISTS(..)が廃止されます。

于 2012-04-07T09:53:23.313 に答える