2013-05-06 46 views
1

我有一張公司的員工表。檢測並更新表中的少量更改

每天,我都會收到公司最新員工名單的電子表格。如果表格中的任何人員(基於SSN)不在電子表格中,則該員工已離開,表格中的EndDate列將更新。如果某人在電子表格中,但不在表格中,則該人員是新員工,必須插入。否則,它是現有的員工,並且零個或多個列(例如電話號碼,主管等)可能已更改,並且該表中的該行必須被修改。

鑑於公司規模只有不到1000名員工,而且每天的變化大約有50名員工,推薦的數據刷新方式是什麼?

我知道沒有最好的解決方案,但希望看到那裏有什麼創意實現。謝謝。

回答

1

SQL Server提供了一個情況特殊merge命令喜歡這個。

你可以用這個簡單的方法:

  • 寫整個電子表格的內容到一個臨時表
  • 執行的職員表的合併和使用SSN匹配爲您的合併搜索條件的臨時表
  • 使用WHEN NOT MATCHED BY SOURCE爲改變EndDate
  • 使用WHEN NOT MATCHED BY TARGET增加新員工
  • 我們e WHEN MATCHED所有剩餘的更新。
1

您可以爲此創建SSIS包,當過你得到一個新spreadsheet.The設計可以如下那樣簡單自動化它

enter image description here

0

根據您的要求你描述我想出了一個主意/解決方案,我會用..

第1步:創建Employee.CSV文件使用REQ。 (Name,Add1,Add2,City,State,ZIp,SSN .....)

步驟2:在應用程序中創建一個頁面,上傳csv文件。 。我將讀取CSV文件並創建通用List(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.. 

如果(LTRIM(RTRIM(ISNULL(@ssN, ''))== '')) 「你的邏輯插入/更新數據存儲過程 return end if if

if(ssn!= '') '編輯情況 返回 端如果

' 現有僱員

SP的--Sample

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 [email protected] AND [email protected] ) 
    BEGIN   
     INSERT INTO employee() 
     VALUES() 
    END 
    ELSE 
    BEGIN 



    END 
END 
ELSE 
BEGIN 
    RAISERROR('your Error', 16, -1) 
    RETURN 
END