首页 > 解决方案 > 更新后的 MSSQL 触发器

问题描述

1
我在 mssql 中有两个表。向表中输入数据时,tiger 表中的 STOCK 列应为 -1,如果 STOCK 列等于 0,则 STATUS 应为 false。请帮忙。

当您将其插入 TBLACTION 仪表板时,它将在 TBLBOOK 仪表板上触发

我英语说得不好。对不起。

标签: sqlsql-serversql-server-2008mssql-jdbc

解决方案


我们为每个要求提供多种解决方案。让我们试试这个:

  1. 向表中输入数据时,tiger 表中的 STOCK 列应为 -1

  2. 如果 STOCK 列等于 0,则 STATUS 应为 false

  3. 当您将其插入 TBLACTION 仪表板时,它将在 TBLBOOK 上触发 3.a) 有人拿书,插入时 ReturnDate 列应为 NULL;3.b)有人归还书,那么您应该更新列 ReturnDate

    在开始插入后创建触发器 [dbo].[TBLBOOKInserted] ON [dbo].[TBLBOOK]

    设置无计数;

    更新 TBLBOOK SET STOCK = -1 WHERE STOCK 为 NULL 且 ID 在(从插入中选择 INSERTED.ID)END GO

    更新开始后在 [dbo].[TBLBOOK] 上创建触发器 [dbo].[TBLBOOKUpdate]

    设置无计数;

    UPDATE TBLBOOK SET BOOKSTATUS = 0 WHERE STOCK = 0 AND ID IN (SELECT INSERTED.ID FROM INSERTED) END GO

    在开始插入后创建触发器 [dbo].[TBLACTIONInsert] ON [dbo].[TBLACTION]

    设置无计数;

    UPDATE TBLBOOK SET STOCK = STOCK-1 WHERE ID IN (SELECT INSERTED.BOOK FROM INSERTED WHERE RETUNDATE IS NULL) END GO

    更新开始后在 [dbo].[TBLACTION] 上创建触发器 [dbo].[TBLACTIONUpdate]

    设置无计数;

    更新 TBLBOOK SET STOCK = STOCK+1,其中 ID 在(SELECT INSERTED.BOOK FROM INSERTED WHERE RETURNDATE 不为 NULL)和 ID 在(SELECT DELETED.BOOK FROM DELETED WHERE RETURNDATE 为 NULL)END GO


推荐阅读