我正在使用应用程序SQL数据库。我们每天都会收到一封电子邮件,其中包含已终止的员工用户ID的列表。下面列出的脚本是我们用来获取用户ID(例如:12345),在数据库中找到它并通过更改值使其停用的脚本。第三部分是将被禁用的用户,并将其放在单独的表中以进行审核。
我想要完成的是
1)如您所见,我必须将用户ID放在三个位置。如何简化为我只能放置一个ID的地方?
2)并非所有用户都在应用程序中。当我看到“受影响的2行”时,我可以看到该用户ID在应用程序中已被禁用。但是,如果该用户甚至没有在数据库中列出,它将被写入审核表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
);
答案 0 :(得分:0)
听起来您想在EnterpriseUser
表上使用触发器。基本上,您可以对其进行设置,以便每当更新表时,is_active
字段从1
变为0
时,其他表也将相应地更新/添加。
SQL Server和MySQL均支持触发器。
答案 1 :(得分:0)
您可以创建一个以IVRID作为参数的函数,至于第3部分,无论您是否对先前的表进行任何更新,您所插入的值都是问题。您可以通过让您的插入使用select语句的输出来解决此问题,例如
INSERT INTO dbo.DailyTerminations (EnterpriseUserID, dateprocessed)
SELECT IVRID, CURRENT_TIMESTAMP FROM EnterpriseUser WHERE IsActive = 0 AND
IVRID NOT IN (SELECT EnterpriseUserID FROM dbo.DailyTerminations )
这将仅为EnterpriseUser中IsActive设置为0并且在DailyTerminations中不存在的记录创建一个条目
希望这会有所帮助