微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我正在为图书馆项目创建数据库,该图书馆项目在未归还插入的书籍时必须给出错误

如何解决我正在为图书馆项目创建数据库,该图书馆项目在未归还插入的书籍时必须给出错误

我的任务是为学校项目建立示例图书馆数据库。到目前为止,几乎所有事情都已完成,除了,我需要创建一个触发器,当图书馆管理员试图检出前贷方尚未归还的书时将触发该触发器。 这是称为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'
);

触发器的代码:请记住,我是sql的新手...

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 举报,一经查实,本站将立刻删除。