我想让触发器阻止员工从角色表中删除,如果该员工已经在处理任务。如果任务尚未开始,则应该可以从角色表中删除员工。DELETE的MSsql触发器
触发:
CREATE TRIGGER trg_role_del
ON Role
FOR DELETE AS
IF EXISTS (SELECT Task.StartTask, Role.EmployeeId,
FROM Task, Role, deleted
WHERE Role.EmployeeId = deleted.EmployeeId
AND Role.EmployeeId = Task.EmployeeId
AND GETDATE() > Task.StartTask)
BEGIN
RAISERROR ('This role is working on a task, cannot be removed', 16, 1)
ROLLBACK TRANSACTION
END;
DELETE语句:
DELETE FROM Role
WHERE EmplyeeId = '003'
然而触发以上不起作用。所有删除都会经过,触发器不会停止任何操作。如果SELECT语句单独运行,它会从表中选择正确的值,所以SELECT看起来很好。我似乎无法让代码正常工作。帮助将不胜感激!
http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to -kick-using-old-style-joins.aspx –