2012-04-07 6 views
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 

Большое вам спасибо.

+0

Когда я вижу такой список всех вещей, которые должен выполнять один пророк ..... вы когда-нибудь слышали о «единственной ответственной ответственности» **? Любой фрагмент кода должен делать ** одно и одно только ** - и делать это хорошо и без ошибок ..... –

+0

Хорошо, спасибо за отзыв, не могли бы вы рассказать мне лучший способ написать название если у тебя есть ? – OnlyHope

+0

BTW Этот SPROC На самом деле это действительно одно! Но он просто разделен на две части, но все же, конечно, если вы знаете другой способ, я бы очень признателен, если вы упомянули об этом .. Спасибо. – OnlyHope

ответ

1

Что я могу понять о структуре вашей базы данных и о том, что вы хотите. Это то, что вам не хватает в вас, где инструкция, чтобы отделить пользователя, у которого есть это расписание.

WHERE  (WeeklyPlan.Wkp_Date = @DateToday) 
      AND [email protected] 

И второй один:

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

Но я согласен с комментарием Вашего вопроса. Поэтому я думаю, вы можете рассмотреть возможность разделения этого PROC на два. Один, который извлекает Student и тот, который извлекает Teacher. Тогда оба из EXISTS(..) устарели.

+0

Ок, я попробую изменить их и проверить результаты. Большое спасибо за помощь :) – OnlyHope

+1

@OnlyHope: Нет проблем. Помните, что если вы считаете, что ответ хороший, помните. Это дает нам все теплые нечеткие чувства: P – Arion

Смежные вопросы