sql触发器确保约会之间的30天不起作用
Posted
技术标签:
【中文标题】sql触发器确保约会之间的30天不起作用【英文标题】:sql Trigger ensuring 30 days between appointments not working 【发布时间】:2021-07-12 19:38:03 【问题描述】:尝试创建一个触发器以确保约会之间至少有 30 天,但这似乎不起作用:
delimiter //
create trigger time_between_doses
before insert on appointment
for each row
begin
if datediff((select appointment_time from appointment where new.patientSSN = patientSSN),
new.appointment_time) < 30
THEN SIGNAL SQLSTATE '45000'
SET mysql_ERRNO = 9996,
MESSAGE_TEXT = 'Not 30 days between appointments for this patient';
end if;
end //
delimiter ;
【问题讨论】:
【参考方案1】:您要检查的查询将使用exists
。 “30 天”的含义还不是 100% 清楚。大概您想知道这是否返回任何行:
select a.*
from appointment a
where new.patientSSN = a.patientSSN and
new.appointment_time < a.appointment_time + interval 30 day;
尚不清楚 30 天的限制是否适用于过去和未来。以及它是否仅适用于过去的约会或也适用于未来的约会。
您的版本是一个等待发生的错误,因为您正在使用一个需要单个值的子查询。如果子查询返回多行,则代码将产生错误。上面的逻辑应该和exists
一起使用。
【讨论】:
以上是关于sql触发器确保约会之间的30天不起作用的主要内容,如果未能解决你的问题,请参考以下文章
触发器在 SQL Server 的 BulkCopy 中不起作用