0
我正在研究SQL Server 2008中的一个小型数据库来跟踪员工更改。我现在遇到了插入触发器的问题。我想要发生的事情是,当“记录”插入到记录表中时,它会为该雇员(EmpID)找到以前的开放记录(即没有结束日期的记录)(如果有),并用一个EndDate - 将在插入的StartDate前一天计算。这里是我试过的,没有成功:SQL插入触发器 - 更新其他记录
CREATE TRIGGER [dbo].[trgInsertRecord] ON [dbo].[Record]
FOR INSERT
AS
declare @EmpID int;
declare @StartDate date;
declare @EndDate date;
select @EmpID=i.EmpID from inserted i;
select @StartDate=i.RealStart from inserted i;
set @EndDate=DATEADD(DAY,-1,@StartDate)
UPDATE Record
SET [email protected]
WHERE [email protected] AND RealEnd=NULL;
有人能帮我理解我的错误吗?
首先,从'插入我选择@的EmpID = i.EmpID;'和'从插入的I选择@的StartDate = i.RealStart;'可以用'@的EmpID =被包装在单个查询我.EmpID,@ StartDate = i.RealStart'。然后,看起来你错过了** UPDATE **语句中的某些内容。如果我得到了正确的答案,则必须将** RealEnd **字段设置为** @ EndDate **值,而不是** NULL **。最后,你不能说'RealEnd = NULL',你必须使用'RealEnd IS NULL'来代替。更新可能是'UPDATE dbo.Record SET RealEnd = @ EndDate WHERE EmpID = @ EmpID AND RealEnd IS NULL;' – 2014-09-06 02:30:46
谢谢亚历山德罗。实际上我几分钟前意识到我在使用= NULL而不是IS NULL时犯的错误。愚蠢的菜鸟错误。 – Boone 2014-09-06 02:55:05