我有一张公司员工的表格。
每天,我都会收到公司最新员工名单的电子表格。如果表格中的任何人(基于SSN)不在电子表格中,则该员工已离开,并且表格中的EndDate
列已更新。如果一个人在电子表格中而不在表格中,那么这是一个新员工,必须插入。否则,它是一个现有员工,零个或多个列(例如电话号码,主管等)可能已更改,表中的行必须更新。
鉴于公司规模不到1,000名员工,而且每天变化大约有50名员工,推荐的数据刷新方法是什么?
我知道没有一个最佳解决方案,但希望看到那里有哪些创意实现。感谢。
答案 0 :(得分:1)
您可以为此创建SSIS
包,并在获得新电子表格时自动执行。设计可以像下面那样简单
答案 1 :(得分:1)
SQL Server为这种情况提供了一个特殊的merge命令。
您可以使用这种简单的方法:
WHEN NOT MATCHED BY SOURCE
更改EndDate
WHEN NOT MATCHED BY TARGET
添加新员工WHEN MATCHED
进行所有剩余更新。答案 2 :(得分:0)
根据您的要求,您描述我想出一个我将使用的想法/解决方案..
步骤1:使用req创建Employee.CSV文件。员工提交需要在Database.Ex中添加/更新(名称,Add1,Add2,城市,州,ZIp,SSN .....)
步骤2:在应用程序中创建一个页面,上传csv文件。我将读取CSV文件并创建通用列表(Employee)对象。
步骤3:调用从员工对象插入/更新数据的存储过程
1) Impalement Transaction in code.
2) loop throw each employee in object.
3) Rollback if any Error Occurred.
4) Implement Stored procedure in database for your case like..
if(Ltrim(Rtrim(isnull(@ssN,''))=='')) '你的逻辑 返回 结束如果
if(ssn!='') '编辑案例 返回 结束如果
'现有员工
- SP的样本
CREATE PROCEDURE sp_Uploademployee
(
@cCode VARCHAR(200),
@cName VARCHAR(500),
.....ETC
)
AS
SET NOCOUNT ON
DECLARE @ID INT
IF ISNULL(@cName,'') <> '' And ISNULL(@ccode,'')<> ''
BEGIN
IF NOT EXISTS (SELECT iID FROM employee WHERE cCode=@cCode AND cName=@cName )
BEGIN
INSERT INTO employee ()
VALUES ()
END
ELSE
BEGIN
END
END
ELSE
BEGIN
RAISERROR('your Error', 16, -1)
RETURN
END