【问题标题】:Single Trigger for multiple events多个事件的单一触发器
【发布时间】:2014-11-16 14:00:07
【问题描述】:

我的 SQL Server 数据库中有两个表,分别是 Trainer(TrainerID, Username, Password, email, .... )TrainerPassword (ID, TrainerID, Password, CreationDate)。 TrainerPassword(TrainerID) 指的是 Trainer(TrainerID)。任务的基线是跟踪培训师的密码更改。我在 Trainer 表上使用 Trigger。

现在的问题是如何触发事件的触发器

  • 插入后 - 在 Trainer 表中发生更新/插入后添加并输入 TrainerPassword。
  • 删除前 - 删除 Trainer 表中的记录应删除 TrainerPassword 中的引用

这两个事件都可以在单个触发器中实现吗...?

【问题讨论】:

  • 由于 SQL Server 没有 BEFORE 触发器,因此这是不可能的。此外,即使您创建了一个 AFTER INSERT 和一个 INSTEAD OF DELETE 触发器,它们不能组合在一起 - 两个单独的执行时间意味着两个单独的触发器
  • 好的。 thx....任何可能的解决方案..?
  • 解决方法是:两个单独的触发器

标签: sql-server tsql triggers


【解决方案1】:

我会做这样的事情......

用于插入和更新

CREATE TRIGGER tr_Trainer_For_Insert_Update
ON Trainer
FOR INSERT, UPDATE
AS
BEGIN
  SET NOCOUNT ON;

  INSERT INTO TrainerPassword (TrainerID, [Password], CreationDate)
  SELECT TrainerID, [Password] , GETDATE()
  FROM inserted

END

删除

CREATE TRIGGER tr_Trainer_For_Delete
ON Trainer
FOR DELETE
AS
BEGIN
  SET NOCOUNT ON;

  DELETE FROM  TrainerPassword 
  WHERE EXISTS (SELECT 1 FROM deleted
                WHERE TrainerID = TrainerPassword.TrainerID )

END

【讨论】:

    猜你喜欢
    • 2012-12-18
    • 2023-02-02
    • 1970-01-01
    • 2013-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-06
    • 1970-01-01
    相关资源
    最近更新 更多