【问题标题】:MSSQL Trigger After update更新后的 MSSQL 触发器
【发布时间】:2021-03-27 05:00:24
【问题描述】:


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

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

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

【问题讨论】:

  • 当您在 SO 上发布您的问题时。请提供您到目前为止所做的事情以及您遇到的问题。另外,您的问题并没有说明您的问题
  • 存储可以派生的数据通常是个坏主意。例如,可以考虑计算状态的视图,而不是触发器。当您存储派生数据时,您引入它与实际数据不一致的机会。

标签: sql sql-server sql-server-2008 mssql-jdbc


【解决方案1】:

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

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

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

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

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

    设置无计数;

    更新 TBLBOOK 放 股票 = -1 在哪里 股票为空并且 ID IN(从 INSERTED 中选择 INSERTED.ID) 结尾 去吧

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

    设置无计数;

    更新 TBLBOOK 放 书状态 = 0 在哪里 股票 = 0 和 ID IN(从 INSERTED 中选择 INSERTED.ID) 结尾 去吧

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

    设置无计数;

    更新 TBLBOOK 放 股票 = 股票-1 在哪里 ID IN (SELECT INSERTED.BOOK FROM INSERTED WHERE RETUNDATE IS NULL) 结尾 去吧

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

    设置无计数;

    更新 TBLBOOK 放 股票 = 股票+1 在哪里 ID IN(从 INSERTED 中选择 INSERTED.BOOK,其中 RETUNDATE 不为 NULL)和 ID IN(SELECT DELETED.BOOK FROM DELETED WHERE RETUNDATE 为 NULL) 结尾 去吧

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-14
    • 1970-01-01
    • 1970-01-01
    • 2021-03-08
    • 2016-11-03
    相关资源
    最近更新 更多