1

我有一张公司员工表。

每天,我都会收到一份公司最新员工名单的电子表格。如果表中的任何人(基于 SSN)不在电子表格中,则该员工已离开并且EndDate表中的列会更新。如果一个人在电子表格中但不在表格中,则该人是新员工,必须插入。否则,它是现有员工,并且零个或多个列(例如电话号码、主管等)可能已更改,并且必须更新表中的该行。

鉴于公司规模不到 1,000 名员工,而且每天的变化大约是 50 名员工,那么推荐的数据刷新方式是什么?

我知道没有最好的解决方案,但想看看那里有哪些创造性的实现。谢谢。

4

3 回答 3

1

您可以为此创建SSIS包并在获得新电子表格时将其自动化。设计可以像下面的一样简单

在此处输入图像描述

于 2013-05-06T10:17:35.213 回答
1

SQL Server 为此类情况提供了一个特殊的合并命令。

您可以使用这种简单的方法:

  • 将整个电子表格的内容写入临时表
  • 使用 SSN 匹配作为合并搜索条件执行员工表和临时表的合并
  • 用于WHEN NOT MATCHED BY SOURCE更改EndDate
  • 用于WHEN NOT MATCHED BY TARGET添加新员工
  • 用于WHEN MATCHED所有剩余的更新。
于 2013-05-06T10:18:14.043 回答
0

根据您描述的要求,我想出了一个我将使用的想法/解决方案..

第 1 步:使用 req 创建 Employee.CSV 文件。员工归档至极需要在 Database.Ex 中添加/更新(名称,Add1,Add2,City,State,ZIp,SSN .....)

第 2 步:在应用程序中创建一个页面,上传 csv 文件。我将读取 CSV 文件并创建通用列表(员工)对象。

第 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,''))=='')) '你的逻辑返回 end if

if (ssn != '') '编辑 case return end if

'现有员工

--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
于 2013-05-06T10:35:37.460 回答