我是SQL新手,包括执行查询。每天,我们的组织都会以列出的格式发送已终止的员工列表。我要做的是两件事,在column
中搜索员工ID,如果找到该员工,则将某个单元格/字段更新为disable
。
例如,如果我们得到一个具有123456
和234567
的员工ID的列表,我想在EMPID
字段中找到那些员工ID,然后更新其ACTIVE字段从“ 1”到“ 0”。
执行此操作的最佳方法是什么?
编辑,对于所有丢失的信息感到抱歉,因为我是论坛和编码界的新手,我将重新解释我要完成的工作。也许有功能吗?我更改了以下数据,以使其与示例相比更加一致。
我们每天都会获得一个文本文件,其中包含终止的员工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
也必须为应用程序正确更新。我唯一的问题是要找到要更新的记录,我必须使用EnterpriseUserID
表中dbo.EnterpriseUser
字段中的StaffID
中的dbo.Staff
字段。
在该行上,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);
答案 0 :(得分:2)
您可以使用以下更新语句来做到这一点:
update Employees
set Active = 0
where EmpId in (123456, 234567)
答案 1 :(得分:0)
如果要手动检查它们,则可以使用更新语句。
如果要在表中插入员工,则可以创建触发器以在每次插入时检查这些员工。
答案 2 :(得分:0)
OP要求提供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;
,但我从未遇到过最佳解决方案涉及手动键入数据的过程。
将您的列表导入到保留表中。使用该表查找和更新受影响的记录。存档列表,并在每条记录上加上日期戳,以指示它们的处理时间。
这使用SQL Server语法,但是没有任何幻想。易于翻译成其他方言。
{{1}}