【发布时间】:2017-11-15 00:45:19
【问题描述】:
当员工表中的工资更新时,我希望将 EmpID、oldrate 和 newrate 移动到 changeLog 表中。
当我运行下面的代码时,它会移动所有员工 ID,并为 oldRate 和一些 newrate 提供 Null
ALTER TRIGGER trg_PayChange
ON Employees
AFTER Update
AS
IF NOT UPDATE(pay)
DECLARE @oldRate VARCHAR(100)
DECLARE @newRate VARCHAR(100)
BEGIN
INSERT INTO ChangeLog (EmpID)
SELECT EmployeeID
FROM Employees
INSERT INTO ChangeLog (OldRate)
SELECT OldRate = (SELECT Pay FROM Deleted)
INSERT INTO ChangeLog (NewRate)
SELECT NewRate = (SELECT Pay FROM Inserted)
END
GO
【问题讨论】:
-
也许存储过程更合适?输入端是什么样的?我会在按钮提交时执行一个存储过程。在参数中设置新值,从表中选择员工及其旧值并将其插入到参数旁边的表中,然后更新原始表。或者这是在触发器上设置的?
-
您可能想要指定您正在使用的数据库引擎。例如,在 MySQL 上,您可能可以在这里找到答案:stackoverflow.com/a/6298881/4206925
-
这种语法看起来像 Transact-SQL (Microsoft SQL Server) 而不是 MySQL。也许这应该被标记为 sql-server 而不是 mysql。
-
你是对的。我修好了,谢谢 spencer7593。这是一个赋值,必须使用触发器。
标签: sql sql-server triggers sql-update sql-delete