我是SQL的新手,包括执行查询。每天,我们的组织都会以列表形式发送一份被解雇的员工名单。我想做的是两件事,在column
中搜索员工ID,如果找到了员工,则将某个单元格/字段更新为disable
。
例如,如果我们得到一个员工ID为123456
和234567
的列表,我想在EMPID
字段中找到这些员工ID,然后将其ACTIVE字段从"1"更新为"0"。
最好的方法是什么?
编辑,很抱歉所有遗漏的信息,因为我对论坛和编码世界完全陌生,我将重新解释我正在努力实现的目标。也许是函数?我更改了下面的数据,以使其与我正在使用的示例更加一致。
我们每天都会收到一个文本文件,其中列出了被终止的员工ID,我们需要在应用程序中停用这些ID。我知道这仍然是手动的,但我认为这是一些自动化的良好开端。
-
在
dbo.EnterpriseUser
表上,我们需要通过查找IVRID
(这是员工的ID(来找到用户的代码,然后将IsActive
字段从1
更新为0
,然后使用相同的格式将LastModDate
更新为当前日期和时间。下面是我正在使用的示例表,如果格式不正确,很抱歉。CREATE TABLE IF NOT EXISTS EnterpriseUser ( `EnterpriseUserID` INT, `FirstName` VARCHAR(6) CHARACTER SET utf8, `LastName` VARCHAR(7) CHARACTER SET utf8, `IVRID` INT, `IsActive` INT, `LastModDate` DATETIME
);插入企业用户价值(6,"Robert","Andrews",2,1'2018-07-11 13:01:54.670000'(;
-
第二个表
dbo.Staff
也必须针对应用程序进行适当的更新。我唯一的问题是,要找到要更新的记录,我必须使用dbo.EnterpriseUser
中的EnterpriseUserID
字段,该字段现在位于dbo.Staff
表的StaffID
字段中。
在该行中,LastModDate
必须更改为当前日期,IsActive
必须从1
更改为0
。
CREATE TABLE IF NOT EXISTS Staff (
`StaffID` INT,
`FirstName` VARCHAR(6) CHARACTER SET utf8,
`LastName` VARCHAR(7) CHARACTER SET utf8,
`LastModDate` DATETIME,
`IsActive` INT
);
INSERT INTO Staff VALUES
(6,'Robert','Andrews','2018-07-11 13:01:54.670000',1);
您可以使用更新语句,如:
update Employees
set Active = 0
where EmpId in (123456, 234567)
OP要求the best possible way to do this
,我从未遇到过最佳解决方案涉及手动键入数据的流程。
将您的列表导入到保留表中。使用该表查找和更新受影响的记录。将列表存档,每条记录上都有一个日期戳,指示处理时间。
这使用了SQL Server语法,但没有什么奇怪的地方。很容易翻译成不同的方言。
CREATE TABLE dbo.DailyTerminations (
EnterpriseUserID INT
);
BEGIN TRANSACTION --By using a transaction, both tables will update or neither will.
--For MySQL, it's START TRANSACTION
UPDATE eu
SET IsActive = 0
FROM
dbo.EnterpriseUser as eu
JOIN
dbo.DailyTerminations as dt
ON dt.EnterpriseUserID = eu.EnterpriseUserID
WHERE
eu.IsActive <> 0;
UPDATE st
SET IsActive = 0
FROM
dbo.Staff as st
JOIN
dbo.EnterpriseUser as eu
ON
eu.EnterpriseUserID = st.StaffID
JOIN
dbo.DailyTerminations as dt
ON dt.EnterpriseUserID = eu.EnterpriseUserID
WHERE
IsActive <> 0;
COMMIT TRANSACTION --For MySQL, it's just COMMIT
INSERT INTO dbo.TerminationArchive
(
EnterpriseUserID,
ProcessedDate
)
SELECT
EnterpriseUserID,
GETDATE()
FROM
dbo.DailyTerminations;
TRUNCATE TABLE
dbo.DailyTerminations;
如果要手动检查,可以使用update语句。
如果要在表中插入员工,则可以创建一个触发器,以便在每次插入时检查这些员工。