Sql server 使用Inserted时,“插入后”触发器不起作用
我试图在Employees表中写入一个触发器,该触发器不允许插入一个新员工,该新员工的雇佣日期早于其上司的雇佣日期Sql server 使用Inserted时,“插入后”触发器不起作用,sql-server,tsql,triggers,Sql Server,Tsql,Triggers,我试图在Employees表中写入一个触发器,该触发器不允许插入一个新员工,该新员工的雇佣日期早于其上司的雇佣日期 CREATE TABLE [dbo].[Employees] ( [EID] [int] IDENTITY(1,1) NOT NULL, [Ename] [nvarchar](20) NOT NULL, [Gender] [nvarchar](1) NOT NULL, [IsMarried] [nvarchar](1) NOT NULL, [
CREATE TABLE [dbo].[Employees]
(
[EID] [int] IDENTITY(1,1) NOT NULL,
[Ename] [nvarchar](20) NOT NULL,
[Gender] [nvarchar](1) NOT NULL,
[IsMarried] [nvarchar](1) NOT NULL,
[Birthdate] [date] NOT NULL,
[HireDate] [date] NOT NULL,
[Salary] [float] NOT NULL,
[Notes] [nvarchar](200) NULL,
[NationalityID] [int] NULL,
[BossID] [int] NULL,
CONSTRAINT [PK_Employees]
PRIMARY KEY CLUSTERED ()
)
这是触发代码:
CREATE TRIGGER [dbo].[Trig_04]
ON [dbo].[Employees]
AFTER INSERT
AS
BEGIN
IF ((SELECT INSERTED.HireDate FROM INSERTED WHERE BossID <> EID) <
(SELECT Employees.HireDate FROM Employees
WHERE EID IN (SELECT Employees.BossID FROM Employees WHERE BossID <> EID)))
ROLLBACK
END
它正常执行时没有错误,但不工作,但是当我在子查询中使用employees表而不是插入的表时,它工作正常。有人对此有答案吗?您必须在SQL Server中编写触发器,以处理插入的数据可能包含多条记录这一事实。你不能假设它只是一条记录。我认为以下是您正在寻找的:
if exists (
select 1
from Inserted I
where I.BossID <> I.EID
and I.HireDate < (select E.HireDate from Employees E where E.EID = I.BossID)
) begin
ROLLBACK;
end
您必须在SQL Server中编写触发器来处理插入的数据可能包含多条记录的事实。你不能假设它只是一条记录。我认为以下是您正在寻找的:
if exists (
select 1
from Inserted I
where I.BossID <> I.EID
and I.HireDate < (select E.HireDate from Employees E where E.EID = I.BossID)
) begin
ROLLBACK;
end
@萨拉西布利尼-这有帮助吗?@萨拉西布利尼-这有帮助吗?