|
悬赏30金币已解决
本帖最后由 lbyeye 于 2009-11-18 13:46 编辑
U872的人力资源中,已将人事附加信息中的教育经历(表:hr_hi_edu)设置为多当前记录表,增加“maxs”(布尔型字段)作为是否最高学历判断,现在还想达到新增记录maxs如为1(是最高学历),自动将同一人的其他行maxs更新为0(不是最高学历),我自己写了个触发器:
ALTER TRIGGER [dbo].[udt_tbu]
ON [dbo].[hr_hi_edu]
FOR insert,update AS --插入和修改触发器
declare @cPsn_Num nvarchar --人员编码
declare @maxs bit --是否最高学历
declare @iRecordID int --同一人的教育经历id
select @cPsn_Num=cPsn_Num ,@maxs=maxs,@iRecordID=iRecordID from inserted
if @maxs=1 and exists(select 1 from hr_hi_edu where cPsn_Num=@cPsn_Num and maxs=1 group by iRecordID having(count(maxs)>1)) --判断新增记录是否为最高学历,以及同一人的最高学历记录是否在一条以上
begin
update [dbo].[hr_hi_edu] set maxs=0 where cPsn_Num=@cPsn_Num and iRecordID<>@iRecordID --将除新增记录外的最高学历更新为否,不能将新插入或更新的值也修改掉
end
但实际使用还是没有实现要求,原有记录为最高学历的还是没变,是触发器那里有问题?
数据库为sql2005
实际操作中已跟踪到确实对表hr_hi_edu的insert |
最佳答案
查看完整内容
。。。。
begin
update x set maxs=0 from hr_hi_edu x inner join inserted b on x.cPsn_Num=b.cPsn_Num and x.iRecordID=b.iRecordID
end
。。。。
|