📄 严琼.sql
字号:
-- 【应用案例】图书馆有时会对某图书的复本量进行更新,如增购某图书
-- 复本,或因各种原因导致某图书丢失部分复本。复本量的更改直接导致库
-- 存量的改变,但为了不因误操作破坏数据完整性,我们不能对库存量直接
-- 修改,可以通过触发器,监测复本量的改变,自动修改库存量,这就可以
-- 用到对选定列的更新进行监测的方法。
-- =============================================
-- Create trigger basic template(After trigger)
-- =============================================
IF EXISTS (SELECT name
FROM sysobjects
WHERE name = N'book_message'
AND type = 'TR')
DROP TRIGGER book_message
GO
CREATE TRIGGER book_message
ON BOOK FOR UPDATE
AS
IF UPDATE(复本量)
BEGIN
DECLARE @ISBN ISBN
DECLARE @orignal_FBL int,@orignal_KCL int,
@cur_JYL int, @aim_FBL int
SELECT @orignal_FBL=复本量,
@orignal_KCL=库存量,
@ISBN=ISBN
FROM DELETED
SELECT @aim_FBL=复本量
FROM INSERTED
IF @aim_FBL>=(@orignal_FBL-@orignal_KCL)
BEGIN
UPDATE BOOK
SET 库存量=@orignal_KCL+(@aim_FBL-@orignal_FBL)
WHERE ISBN=@ISBN
END
ELSE
BEGIN
RAISERROR('对复本量的更新违反了用户定义数据完整性',16,10)
ROLLBACK TRANSACTION
END
END
GO
--在XS表上设计触发器,使得毕业时未还完书的学生不得注销借书证
--(即:如果学生借阅量>0,不得删除该学生信息)
-- =============================================
-- Create trigger basic template(After trigger)
-- =============================================
IF EXISTS (SELECT name
FROM sysobjects
WHERE name = N'Student_message'
AND type = 'TR')
DROP TRIGGER Student_message
GO
CREATE TRIGGER Student_message
ON XS
FOR DELETE
AS
BEGIN
DECLARE @借书量 int
DECLARE stu_cursor CURSOR
FAST_FORWARD READ_ONLY
FOR
SELECT 借书量
FROM DELETED
OPEN stu_cursor
FETCH NEXT FROM stu_cursor
INTO @借书量
WHILE @@FETCH_STATUS = 0
BEGIN
IF @借书量>0
BEGIN
RAISERROR ('该同学还存在借阅记录,不能注销借书证!', 16, 10)
ROLLBACK TRANSACTION
RETURN
END
FETCH NEXT FROM stu_cursor
INTO @借书量
END
CLOSE stu_cursor
DEALLOCATE stu_cursor
END
GO
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -