Sql server 2008 使用存储过程检索数据
此存储过程应该:Sql server 2008 使用存储过程检索数据,sql-server-2008,stored-procedures,Sql Server 2008,Stored Procedures,此存储过程应该: 将userid和Date作为输入参数 检查此Id是否属于教师或学生 如果用户是学生,它应该输出他一天的主题以及每个主题将要讨论的内容 如果用户是一名教师,它应该输出他一天的课程以及他将在每节课上教授的内容 我使用的表格有:周计划(Id、日期、课程、计划),科目(姓名、Id),学生(用户名、姓名、班级),教师(姓名、用户名),时间表(科目、日期、班级) 现在我编写了这个存储过程(它应该做上面写的事情),但它没有 如果我写错了,请你检查一下,给我一些想法好吗?如果我用另一种方式问问
userid
和Date
作为输入参数Id
是否属于教师或学生周计划(Id、日期、课程、计划)
,科目(姓名、Id)
,学生(用户名、姓名、班级)
,教师(姓名、用户名)
,时间表(科目、日期、班级)
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
非常感谢。我对您的数据库结构的理解以及您的需求。您在where语句中缺少指定具有此计划的用户
WHERE (WeeklyPlan.Wkp_Date = @DateToday)
AND Student.Std_UserID=@UserId
第二个:
WHERE (WeeklyPlan.Wkp_Date = @DateToday)
AND Teacher.Tch_UserID = @UserId
但我同意你对问题的看法。所以我认为你可以考虑把这个过程分成两个部分。取
学生
的一个和取老师
的一个。然后这两个都存在(…)
已经过时了。当我看到一个进程应该做的所有事情的列表时。。。。。你听说过单一责任原则吗??任何一段代码都应该做一件事,而且只能做一件事——并且做得很好并且没有错误……好的,谢谢你的反馈,如果你有一个,你能告诉我一个更好的写标题的方法吗?顺便说一句,这个程序实际上只做一件事!但它只分为两部分,当然如果你知道另一种方式,如果你提到它,我会非常感激。。谢谢。好吧,考虑到返回值是完全不同的(值的数量和它们的数据类型),我认为这是两个完全不同的任务压缩在一个进程中。这对我来说没有意义。我只是想知道为什么调用者还不知道他是在和学生还是老师打交道——我会创建两个独立的、不同的存储过程——每个任务一个——然后让调用者为每个作业调用正确的过程。好的,我将拆分它们。非常感谢您的帮助:)我很抱歉,因为我的代码很愚蠢,我会努力学得更快。谢谢。好的,我会尝试修改它们并检查结果。非常感谢你的帮助:)@OnlyHope:没问题。。如果你认为答案是好的,记得投赞成票。它给我们所有人温暖模糊的感觉:P