SQL数据库:更新表

时间:2018-07-25 14:37:12

标签: jquery mysql sql-server

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

2 个答案:

答案 0 :(得分:0)

听起来您想在EnterpriseUser表上使用触发器。基本上,您可以对其进行设置,以便每当更新表时,is_active字段从1变为0时,其他表也将相应地更新/添加。

SQL ServerMySQL均支持触发器。

答案 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中不存在的记录创建一个条目

希望这会有所帮助