sql数据库:更新表

fnatzsnv  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(395)

我正在使用一个应用程序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
);
dwbf0jvd

dwbf0jvd1#

您可以创建一个将ivrid作为参数的函数,就像第3部分一样,您遇到的问题是,无论是否有对以前的表的任何更新,都要插入一个值。您可以通过让insert使用类似这样的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中不存在的记录创建条目
希望这有帮助

col17t5w

col17t5w2#

听起来好像你想在车上扣个扳机 EnterpriseUser table。基本上,您可以对其进行设置,以便每当更新表时 is_active 字段更改自 10 ,其他表将相应地更新/添加到。
sql server和mysql都支持触发器。

相关问题