检测并更新表中的少量更改

时间:2013-05-06 10:10:14

标签: c# sql-server clr

我有一张公司员工的表格。

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

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

我知道没有一个最佳解决方案,但希望看到那里有哪些创意实现。感谢。

3 个答案:

答案 0 :(得分:1)

您可以为此创建SSIS包,并在获得新电子表格时自动执行。设计可以像下面那样简单

enter image description here

答案 1 :(得分:1)

SQL Server为这种情况提供了一个特殊的merge命令。

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

  • 将整个电子表格的内容写入临时表格
  • 使用SSN匹配作为合并搜索条件执行employee表和临时表的合并
  • 使用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