严琼.sql

来自「图书馆有时会对某图书的复本量进行更新」· SQL 代码 · 共 93 行

SQL
93
字号
--   【应用案例】图书馆有时会对某图书的复本量进行更新,如增购某图书
-- 复本,或因各种原因导致某图书丢失部分复本。复本量的更改直接导致库
-- 存量的改变,但为了不因误操作破坏数据完整性,我们不能对库存量直接
-- 修改,可以通过触发器,监测复本量的改变,自动修改库存量,这就可以
-- 用到对选定列的更新进行监测的方法。

-- =============================================
-- 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 + =
减小字号Ctrl + -
显示快捷键?