【问题标题】:SQL trigger for checking if a user is alread in a table用于检查用户是否已在表中的 SQL 触发器
【发布时间】:2023-03-16 07:10:02
【问题描述】:

我正在尝试编写一个在将新用户添加到表时执行的触发器。添加用户时,我需要触发器检查表以查看用户是否已经存在,如果存在,则吐出一条错误消息,说明用户已经存在。否则,插入应该通过。

ALTER TRIGGER tR_CustomerCheck ON CUSTOMER 
FOR INSERT, UPDATE 
AS
IF EXISTS
    (SELECT *
    FROM CUSTOMER AS C
        JOIN inserted as I
            ON C.UserID  = I.UserID 
    WHERE C.UserID = I.UserID )
    BEGIN
        PRINT 'Customer already exists.';
        ROLLBACK TRANSACTION;
        RETURN;
    END;

似乎该行被插入,然后被检查,所以它总是失败。我确信它必须是一个简单的修复,但我无法确定它。

【问题讨论】:

  • 为什么是触发器?客户表的外键约束就足够了。
  • 我同意外键会更好/更容易维护,但在这种情况下,它必须是触发器。
  • 我想你不能在前端检查存在?

标签: sql triggers


【解决方案1】:

不要使用FOR/AFTER 触发器,而是使用INSTEAD OF 触发器。虽然我不得不同意 Wildplasser 的评论。这是对唯一约束的教科书式利用。

【讨论】:

  • 我曾尝试使用 INSTEAD OF,但是当我在触发器中切换它时,当我尝试插入有效行时没有任何反应。如果它已经存在,它会捕获代码,但如果它是新的,则不会插入该行。
  • @THansenite 您可以在您的问题中发布您的INSTEAD OF 触发代码吗?另外,你为什么不去约束呢?
猜你喜欢
  • 2018-09-08
  • 1970-01-01
  • 1970-01-01
  • 2021-02-11
  • 2021-04-04
  • 1970-01-01
  • 1970-01-01
  • 2011-10-14
  • 1970-01-01
相关资源
最近更新 更多