我希望在具有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
答案 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,则会返回该帐户。
然后你可以从那里开始工作。