我正在研究我的最后一年项目,这是一个学校管理系统,这个项目中有很多任务,但我此时正在考勤模块上工作,我创建了一个在SQL Server存储过程中面临重复错误
- 学生姓名
- 类名称
- 考勤状态(列名是 “状态”)
- 日期(当前考勤日期)
然后我创建了一个存储过程。该存储过程将获取学生姓名,班级名称和出勤状态作为参数,然后将其添加到考勤表中,该表格显示学生是否在指定日期或缺席, 日期列的默认值为getDate()
。
存储过程首先检查学生出勤是否已在表中存在当前日期,然后它会更改出勤状态列值而不是添加新行,并且如果学生出勤不存在当前日期,则存储过程将添加新行,
但 ......
我的程序工作不正常,当我第一次传递参数,它增加了新行,当我再次通过相同的参数,那么它应该替换考勤状态列,但它又添加了一个新行。
但是,第三次,当我传递相同的参数,那么它工作正常,并取代状态列值,所以在这种情况下,我有同一个学生2行,但我只需要一行。
请指导我什么是我的存储过程中的问题 - 这里是代码:
create procedure spAttend_Stu
@Name nvarchar(200),
@C_Name nvarchar(50),
@Status nvarchar(50)
as
begin
if ((select count(*)
from tbl_Attend_Stu
where Student_Name = @Name
and Date = (select convert(date, getdate()))) > 1)
update tbl_Attend_Stu
set [Status] = @Status
where [Date] = (select convert(date, getdate()))
else
insert into tbl_Attend_Stu (Student_Name, Class_Name, Status)
values (@Name, @C_Name, @Status)
end
编辑:
这里是我的表definition..see这个截图:
我把这个值作为例子
spAttend_Stu 'Ammar', 'BSCS', 'Absent'
我再次运行相同的查询,但并不如预期的结果
鉴于此截图例如执行
非常感谢你的兄弟:)我已经试过你建议,但问题仍然存在,我已编辑我的问题,并添加了表格定义屏幕截图和我在这个时候使用的示例..请看看:) –
您还可以提供您的表后运行后的样子使用您提供的示例值运行3次存储过程? – sadmicrowave
好的兄弟我已经添加了一个截图,执行后请检查 –