我想在SQL Server中創建一個檢查約束。SQL Server:檢查約束
我有一張名爲Studies
的表,它有'pnr
','courseCode
','assignment
'。
我有一個名爲Student
的表,它有'pnr
'。
我有一張名爲Course
的表,它有'courseCode
'。
我有一個名爲Assignment
的表,它有'courseCode
','assignment
','assignmentPoints
'。
現在我想檢查一下,防止管理員將pnr
插入Studies
如果該pnr
目前已經參加值得多點的課程,則限制爲45分。
我已經得到這麼多,但它不起作用。
create function EnrollmentFunction (@pnr varchar(10)) returns varchar(10)
as
begin
if exists (
select sum(assignmentPoints) as Points
from Assignment a
join Studies s
on a.courseCode = s.courseCode
and a.assignmentName = s.assignmentName
and a.sectionName = s.sectionName
and pnr = @pnr
where assignmentPoints > 45)
return 'False'
return 'True'
end
alter table Studies
with check add constraint CK_Points
check (dbo.EnrollmentFunction(pnr) = 'True')
然而,當我運行對特定學生插入和添加課程時學生已超過它通過對點的極限,檢查沒有阻止插件。
請幫忙!
您是否需要pnr的總分配點數大於45或任何一個課程分配點和任務大於45? – ughai
你的函數忽略了它的參數。這可能是第一個要解決的問題。 –
學生已經參加的積分不得超過45分。 –