【发布时间】:2016-05-24 15:22:14
【问题描述】:
我必须在表(Employee)中实现触发器,当一个简单的员工获得高于他部门经理的薪水时,触发器应该“触发”。 我已经做到了。
CREATE TRIGGER sal on EMPLOYEE
AFTER INSERT,UPDATE
as
declare @sal int;
declare @sal_mgr int;
declare @sal_manager TABLE(sal int)
SELECT @sal = salary FROM EMPLOYEE
SELECT @sal_mgr = salary FROM EMPLOYEE join Department on ssn = mgr_ssn where dno=dnumber
INSERT INTO @sal_manager values (@sal_mgr)
UPDATE EMPLOYEE SET salary = @sal_mgr-1 where salary >= @sal_mgr
但是这样我只能得到 1 位经理的薪水,而不是我在不同部门的所有工资(每个部门只允许 1 位经理)
【问题讨论】:
-
一名员工只有一名经理,不是吗?那么其他哪些经理的薪水会很重要?
-
每个员工只有一个经理,一个经理有很多员工。这段代码总是获取相同经理的薪水,并将每个员工与他的薪水进行比较。不是他们部门的经理
-
我很惊讶上面的运行了!您有多个语句,但没有开始 - 结束结构。
-
好的,所以您在更新/插入 1 个员工记录时运行此触发器,处理 1 个员工,有 1 个经理,有 1 个薪水。那你为什么要和任何其他经理或他们的薪水做任何事情呢?当您只与单个部门的单个员工打交道时,您似乎想获得“我在不同部门拥有的一切”。
-
例如,我必须比较部门员工的工资。 1与部门经理。部门员工的工资。 2与部门经理。以此类推。
标签: sql sql-server database triggers