【发布时间】:2014-10-09 22:38:38
【问题描述】:
我正在尝试在Employee 表上定义一个触发器,这样如果Employee 的Salary 列更新,TaxDetails 表中的TaxDeduction 列也应该更新。
这是我写的触发器:
create trigger tr_EmpTaxDetails
On Employee
For Update
As
if Update (Salary)
Begin
Declare @SSN int;
Declare @Salary money;
Declare @TaxDeduction money;
select @SSN = i.SSN from Inserted i
select @Salary = Salary from Inserted where SSN = @SSN
Update TaxDetails
Set TaxDeduction = (TaxRate/100)* @Salary
where EmpSSN = @SSN
End
Go
当我执行时
update Employee
set Salary = 35000
where SSN = 12334
我收到一个错误
将 varchar 值 'Employee SSN' 转换为数据类型 int 时转换失败
但是Employee 中的SSN 是int 类型,就像Taxdetails 中的EmpSSN 一样
请帮我解决这个问题
【问题讨论】:
-
触发器必须是批量“感知”的。你的不是。
-
您确实意识到此触发器仅在更新单个记录时才有效。