有条件更新的数据库触发器问题

Posted

技术标签:

【中文标题】有条件更新的数据库触发器问题【英文标题】:Database trigger problem with conditional update 【发布时间】:2020-09-23 10:22:58 【问题描述】:

我想在将数据集插入表后更正一个值。我尝试使用数据库触发器来解决这个问题。但是,如果我在更新调用中添加条件,它就不再起作用了。

到目前为止,此代码正在运行:

CREATE TRIGGER dbo.trgValidateQuantityUnit
    ON  dbo.tblPart AFTER INSERT

AS 
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    -- Insert statements for trigger here

    UPDATE tblPart SET tblPart.description3='TEST'
    FROM tblPart INNER JOIN inserted ON (tblPart.id = inserted.id);

END
GO

它不再更改数据。如果将更新查询更改为:

UPDATE tblPart SET tblPart.description3='TEST'
FROM tblPart INNER JOIN inserted ON (tblPart.id = inserted.id)
WHERE (tblPart.craftelectro<>0);

我也试过

UPDATE tblPart SET tblPart.description3='TEST'
FROM tblPart INNER JOIN inserted ON (tblPart.id = inserted.id)
AND (tblPart.craftelectro<>0);

有人可以指点我正确的方向吗?

编辑: 触发器的目的应该是使数量单位(在下面的示例数据中)具有相同的格式。例如不为空,大写。数量单位由 productgroup、craftelectro 等其他字段确定 ...

quantityunit            |craftelectro|productgroup
__________________________________________________
??_??@M;                |           1|  29
de_DE@M;en_EN@M;en_US@M;|           1|  29
??_??@m;                |           1|  29
                        |           1|  29

【问题讨论】:

我相信你想要的是WHERE (inserted.craftelectro&lt;&gt;0) no unfurtonately 仍然无法正常工作 也许您可以向我们展示一些示例数据和预期结果,以便我们对您想要达到的目标有一个清晰的了解。事实上,我们都在猜测 添加了一些示例数据,我希望它更清楚一点,我想要做什么。 description3 字段仅用于测试,因为它通常为空 这个触发器看起来不错。这张表还有其他触发器吗? 【参考方案1】:

你应该这样重写你的代码:

CREATE TRIGGER dbo.trgValidateQuantityUnit
    ON  dbo.tblPart 
    AFTER INSERT
AS 
BEGIN
    SET NOCOUNT ON;
    UPDATE T
    SET    description3='TEST'
    FROM   tblPart AS T
           INNER JOIN inserted AS i
              ON T.id = i.id;
END
GO

【讨论】:

嗨,这段代码可以正常工作,但是如果我添加一个额外的条件,比如WHERE (i.craftelectro&lt;&gt;0);,它就会停止工作 @Andreas 你确定craftelectro 包含一个非空值吗? 定义为craftelectro(bit, not NULL)

以上是关于有条件更新的数据库触发器问题的主要内容,如果未能解决你的问题,请参考以下文章

触发器处理表更新

插入后PostgreSQL触发函数更新

SQL 创建触发器以在特定条件下更新表

mysql关于触发器怎么判断数据存在时更新不存在时添加呢!

Oracle表的更新触发器问题,更新本表的字段。

关于SQL触发器 B表读取A表的字段信息 并更新到指定的B表字段