在第一部分,你可以简单地添加默认约束:
alter table patient add constraint df_status default 'Registered' for status
如果这是不够的,因为你的前端是不能在插入省略状态或设定值设为默认,你可以创建一个触发:
create trigger PatientInsertTrigger on patient
after insert
as
-- trigger should not alter @@rowcount
set nocount on
update patient
set status = 'Registered'
from Patient
-- Inserted is a pseudotable holding newly inserted rows
-- This is how we know what records to update
inner join Inserted
on Patient.ID = Inserted.ID
当记录添加到诊断或从诊断中删除时,应根据诊断中匹配记录的数量更新患者状态。幸运的是,在调用触发器的时候,记录已经在表中了,所以在这两种情况下都需要count()。
create trigger DiagnosisTrigger on diagnosis
after insert, delete
as
set nocount on
update patient
set status = case when d.NumberOfDiagnosis <> 0
then 'Diagnosed'
else 'Registered'
end
from Patient
inner join
(
select PatientID, count(*) NumberOfDiagnosis
from Diagnosis
-- Get all patients with added or removed diagnosis
where PatientID in (select PatientID
from Inserted
union
select PatientID
-- Pseudotable holding removed records
from Deleted)
group by PatientID
) d
on Patient.ID = d.PatientID
状态应该是StatusID,但是您没有提到适当的id号。
这可能只是我,但我不是你问清楚。请你可以列出*(作为你的问题的编辑)*你想要触发器做什么? * [我认为你一定想要3),也许2),但也可能是1)。从你的问题来看,这不是很清楚。] *'1).'当插入新的病人记录时,强制登记状态? '2).'当插入一个新的诊断时,状态将被诊断? '3).'删除*最后*诊断记录时,强制状态为注册? – MatBailie