一个利用SQL触发器的问题.请帮忙!谢谢!

edplrh2006 2006-12-23 10:27:19
我有一个触发器,如果Effect字段为1时,就更新另一张表的Salary字段.但为何有多条记录的Effect字段都被更新为1时,却只更新一条Salary记录呢?触发器如下:
CREATE trigger tg_raises
on dbo.Raises
for insert,update
as
declare @Employeeid int
declare @Effect int
declare @NewSalary int

select @NewSalary=NewSalary,@Effect=Effect,@Employeeid=Employeeid from inserted
if @Effect=1
begin
update employeesalary set Salary=@NewSalary where Employeeid=@Employeeid
end

试过不要Employeeid=@Employeeid,但这样的话,只要有一条记录的Effect更新为1时,所有记录的Salary都会被更新
...全文
184 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
edplrh2006 2006-12-25
  • 打赏
  • 举报
回复
正解!謝謝!
zsl5305256 2006-12-24
  • 打赏
  • 举报
回复
select @NewSalary=NewSalary,@Effect=Effect,@Employeeid=Employeeid from inserted
这只能取到最后一条符合的记录,所以就只理新一条了!
update a set Salary = i.NewSalary from employeesalary as a
inner join inserted as i on a.Employeeid = i.Employeeid
where i.Effect = 1
hellowork 2006-12-24
  • 打赏
  • 举报
回复
CREATE trigger tg_raises on dbo.Raises
for insert,update
as
update a set Salary = i.NewSalary from employeesalary as a
inner join inserted as i on a.Employeeid = i.Employeeid
where i.Effect = 1
GO

注意:下面这行代码只能读取一行
select @NewSalary=NewSalary,@Effect=Effect,@Employeeid=Employeeid from inserted
如果有批量更新或插入的情况请不要这样写,应该与inserted表进行内连接.
中国风 2006-12-24
  • 打赏
  • 举报
回复
update employeesalary set Salary=@NewSalary
where Employeeid=@Employeeid--这里一定要加条件限制
inserted 有没有列在Employeeid是唯一对应的
edplrh2006 2006-12-23
  • 打赏
  • 举报
回复
怎样啊?谁告诉我怎么修改啊?

27,581

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧