我正在使用一个应用程序sql数据库。我们每天都会收到一封电子邮件,其中包含已终止的员工用户id列表。下面列出的脚本是我们用来获取用户id(例如:12345),在数据库中找到它并通过更改值来停用它的脚本。第三部分是将被禁用的用户放入一个单独的表中进行审计。
我想要完成的是
1) 如您所见,我必须将用户id放在三个位置。如何简化到只需放置一个id?
2) 并非所有用户都在应用程序中。当我看到“受影响的2行”时,我可以看到该用户id已在应用程序中被禁用。但是,如果用户甚至没有列在数据库中,它就会被写入audit表 DailyTerminiations
. 有什么建议吗?我将监测这个职位的问题,你可能有。
-- PART 1
UPDATE EnterpriseUser
SET IsActive = 0, LastModDate = CURRENT_TIMESTAMP
WHERE
IVRID = 12345;
-- PART 2
UPDATE Staff
SET IsActive = 0, LastModDate = CURRENT_TIMESTAMP
WHERE StaffID =
(SELECT EnterpriseUserID
FROM EnterpriseUser
WHERE IVRID = 12345);
-- PART 3
INSERT INTO dbo.DailyTerminations (EnterpriseUserID, dateprocessed)
values (12345, CURRENT_TIMESTAMP
);
2条答案
按热度按时间dwbf0jvd1#
您可以创建一个将ivrid作为参数的函数,就像第3部分一样,您遇到的问题是,无论是否有对以前的表的任何更新,都要插入一个值。您可以通过让insert使用类似这样的select语句的输出来解决这个问题
这将只为enterpriseuser中isactive设置为0且dailyterminations中不存在的记录创建条目
希望这有帮助
col17t5w2#
听起来好像你想在车上扣个扳机
EnterpriseUser
table。基本上,您可以对其进行设置,以便每当更新表时is_active
字段更改自1
至0
,其他表将相应地更新/添加到。sql server和mysql都支持触发器。