如何解决我正在为图书馆项目创建数据库,该图书馆项目在未归还插入的书籍时必须给出错误
我的任务是为学校项目建立示例图书馆数据库。到目前为止,几乎所有事情都已完成,除了,我需要创建一个触发器,当图书馆管理员试图检出前贷方尚未归还的书时将触发该触发器。
这是称为LenderRecord
的表的代码,应该对上述插入进行条件处理。
CREATE TABLE LenderRecord
(
RecordID INT NOT NULL IDENTITY(1,1) PRIMARY KEY,MediaID INT,LenderID INT,DateTaken DATE NOT NULL,DateReturned DATE,--YYYY-MM-DD FORMAT!
Reservation NVARCHAR(20),FineAmtDue MONEY DEFAULT '0',FineAmtPaid MONEY DEFAULT '0'
);
CREATE TRIGGER trig_BookNotReturned --This trigger fires when a mediaid is being inserted that has
not bee returned by the prevIoUs lender.
ON LenderRecord
AFTER INSERT,UPDATE
AS
BEGIN
IF EXISTS( SELECT MediaID FROM inserted WHERE DateReturned = '1900-01-01' )
BEGIN
ROLLBACK TRANSACTION
RAISERROR ('This book has not been returned yet',16,1)
END
END
GO
但是,当我执行此触发器并将数据插入表中时,它仅捕获具有DateReturned
而不是'1900-01-01'的插入。
请有人可以给我更好的方法吗? 谢谢
解决方法
您的查询需要使用INSERTED.MediaID
来找到同时满足两个条件的LenderRecord
:
IF EXISTS( SELECT MediaID FROM LenderRecord WHERE MediaID = INSERTED.MediaID AND DateReturned = '1900-01-01' )
但是,此操作仅在INSERT
上有效,因此您的触发器应仅在INSERT
上触发,而不应在UPDATE
上触发。
如果您在UPDATE
上触发触发器,则永远无法设置DateReturned
,因为触发器会阻止它。
也可以考虑保留DateReturned
为NULL,直到您有一个有效的日期并为查询中的DateReturned IS NULL
过滤为止。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。