【问题标题】:SQL Server : Raiserror Trigger if new value is lower than or equals old valueSQL Server:如果新值小于或等于旧值,则触发 Raiserror
【发布时间】:2016-12-12 15:53:48
【问题描述】:

我目前正在开发一个触发器,如果​​新值小于或等于旧值,则该触发器会引发错误。

这是我的number_table,其中包含两列:

Handle (int) | IK (numeric(18,0)

现在 IK 内容可能会改变,但应该只会向上改变,所以我想创建触发器以引发错误,如果新值等于或低于旧值。

这是我目前得到的触发器,但它似乎根本不起作用,因为它不会引发错误:

CREATE TRIGGER TR_IK ON number_table
FOR UPDATE
AS BEGIN
    SELECT *
    FROM inserted i 
    JOIN deleted d ON i.Handle = d.Handle 
    WHERE i.IK < d.IK

    RAISERROR ('The new IK is either lower than or equals the old IK', 11, 1) with log
END

如果新的 IK 值低于或等于旧的 IK 值,它只会引发错误,有人知道我做错了什么吗?

提前致谢!

【问题讨论】:

  • 如果新值小于或等于旧值,是否要回滚?

标签: sql-server sql-server-2008 triggers


【解决方案1】:

试试这个

CREATE TRIGGER TR_IK ON number_table
FOR UPDATE
AS BEGIN
    IF EXISTS (
        SELECT *
        FROM inserted i join deleted d ON i.Handle = d.Handle 
        WHERE i.IK <= d.IK
        )
    RAISERROR ('The new IK is either lower than or equals the old IK', 11, 1) with log


END

【讨论】:

  • 需要根据要求将不等式检查更改为
  • @SeanLange 谢谢。 (想了想,原来的代码有
  • 正确的短语是“低于”而不是“低于”
  • @HLGEM 我更正了我的拼写...抱歉英语不是我的母语
  • @DVT 谢谢,我试试看!只是另一个问题,你知道吗,我如何将 i.IK 和 d.IK 的值放入 RAISERROR 消息中,因为如果我知道值是什么以及它已经改变了什么,它将帮助我识别问题。提前致谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-16
  • 2021-04-04
  • 1970-01-01
  • 2017-04-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多