【问题标题】:SQL Trigger Delete Row if Value is 0 [duplicate]如果值为 0,则 SQL 触发器删除行 [重复]
【发布时间】:2019-06-28 20:24:19
【问题描述】:

我正在尝试创建一个触发器来检查特定列的更新后的值是否为 0。如果值为 0,则应删除该行。我对触发器不是很熟悉。如果有人向我展示/解释它,我将不胜感激。这是我尝试过的:

CREATE TRIGGER [dbo].[after_update] 
   ON [dbo].[tbl_LagerPos]
   AFTER UPDATE
AS 
BEGIN
    DELETE FROM tbl_LagerPos WHERE Bestand = 0;
END
GO

这里 Bestand 是如果为 0 则应检查的那一项。如果是,则应删除整行。我知道这是在检查整个表格并且基本上是错误的。所以我只需要它来记录那个特定的记录。

【问题讨论】:

  • 这是否必须在每次编辑后立即发生,还是您可以定期运行该 DELETE 查询以删除不需要的记录?
  • 我的意思是它应该在对表进行更新后运行,然后检查它是否为 0,然后根据它是否为 0 将其删除。我也需要检查它是否有插入,但我不想要求太多。
  • 是的,我知道你的意思。它必须在每次更新时发生,还是您可以每天运行一次或两次?
  • However, it doesn't work anyway. ... 那么当您进行更新时会发生什么
  • 您可能需要 DELETE FROM tbl_LagerPos WHERE Bestand = 0 and id in (select id from inserted); 并且您可以将 AFTER UPDATE 更改为 AFTER INSERT, UPDATE 以在插入时获取它。

标签: sql-server tsql database-trigger


【解决方案1】:

不要为此使用触发器。 对客户端进行检查。 您还可以向数据库添加列约束:

alter table dbo.Table1 add Column1 int not null constraint CHK_Column1 check (Column1 > 0);

【讨论】:

    猜你喜欢
    • 2021-12-04
    • 1970-01-01
    • 2019-02-26
    • 2010-09-14
    • 2020-01-15
    • 2020-07-28
    • 2011-02-05
    • 2015-09-12
    • 1970-01-01
    相关资源
    最近更新 更多