触发器会触发特定的布尔字段更改

时间:2018-06-14 08:37:25

标签: sql-server tsql

我希望在具有MSSQL数据库的应用程序中锁定特定用户帐户时设置警报,因为应用程序中的某些内容正在锁定它!

我认为当特定用户记录上的“IsLocked”布尔字段为true时,发送电子邮件的触发器或存储过程。请问Trigger可以吗?

我想到了类似下面的内容,但我对此的担心是,如果触发器在处理已被锁定的其他帐户时忙,则可能会错过相关帐户被锁定。存储过程是另一种选择,但是有一个问题是它需要每5分钟运行一次,例如检查记录,然后在发送第一个警报电子邮件后停止!!

IF UPDATE (IsLocked)
BEGIN
DECLARE @varLocked varchar(30)
  SELECT @varLocked = IsLocked FROM Users where UserId = 'xxxx'
  IF (@varLocked = 1)
  BEGIN
    /* send email */
  END
END

2 个答案:

答案 0 :(得分:1)

你想要的触发器将是"简单"这样:

CREATE TRIGGER AccountLocked ON YourTable
AFTER UPDATE
AS 
BEGIN
    SET NOCOUNT ON;

    INSERT INTO YourLogTable (UserName, LogDateTime/*Other columns*/) --Don't forget to create your log table first!
    SELECT i.UserName, GETDATE()
    FROM inserted i
         JOIN deleted d ON i.IdColumn = d.IdColumn
    WHERE i.Islocked = 1 and d.IsLocked = 0;

END
GO

然后,您只需创建指向日志表的SP,并通过电子邮件向您发送相关详细信息。

答案 1 :(得分:0)

触发器内部:

WITH Accounts AS (SELECT UserId, IsLocked FROM INSERTED EXCEPT SELECT UserId, IsLocked FROM DELETED) 
SELECT UserId FROM [Accounts] WHERE IsLocked = 1 and UserId = 'XXXX'

如果帐户从IsLocked = 0更新为IsLocked = 1,则会返回该帐户。

然后你可以从那里开始工作。