2016-06-10 34 views
-2

您能否幫我關注下列問題?從CSV導入時更新現有列值並插入新的記錄在SQL中不存在

我們有在SQL Server上運行的工資軟件。我必須從SQL Server更新某個工資類別,以便它能反映軟件。

這是我的Excel文件:

Employee Number Payroll Category Rate 
------------------------------------------ 
111111   011    32.21 
111111   012    56.23 
111111   013    12.52 
111111   021    45.21 
111112   011    36.21 
111112   012    56.23 
111112   013    42.54 
111112   021    85.21 

這些都是在我的數據庫表Masterpaycard

Employee Number  Payroll Category Rate 
------------------------------------------- 
    111111   011    0.00 
    111111   012    0.00 
    111111   013    10.25 

    111112   011    36.21 
    111112   012    12.50 
    111112   013    41.25 
    111112   021    85.21 

所以當前值,如果你看到下面的記錄不存在於數據庫中,但目前在.CSV,那麼我必須插入它。

111111   021    45.21 

這裏員工編號和工資類別是從EmployeePayroll Category表FKS。

所以我的最終結果應該看起來像數據庫和前端這樣的東西。

Employee Number Payroll Category Rate 
-------------------------------------------- 
    111111   011    32.21 
    111111   012    56.23 
    111111   013    12.52 
    111111   021    45.21 
    111112   011    36.21 
    111112   012    56.23 
    111112   013    42.54 
    111112   021    85.21 

我想用通俗的話說,如果在MASTERPAYCARD表工資類別匹配,那麼剛剛從.CSV更新值的類別,比插入作爲該員工的新的類別,如果我們不能找到Payrollcategory和太增值CSV。

請幫忙。

+1

我會建議加載整個Excel CSV如放入臨時表中。然後,您可以執行一些查詢來確定需要插入或更新的內容。 – nscheaffer

+0

因爲我是一種新的SQL可以請給我一個例子嗎? – user2040021

+1

使用連接查找更新。 SO不是一種編碼服務。 – Paparazzi

回答

1

這是你需要採取的方法類型...

create table #Table1 (
    id int, 
    value varchar(10) 
) 

create table #Table2 (
    id int, 
    value varchar(10) 
) 

insert into #Table1 values (1, 'AAA') 
insert into #Table1 values (2, 'BBB') 

insert into #Table2 values (1, 'ZZZ') 
insert into #Table2 values (3, 'CCC') 

select * from #Table1 
select * from #Table2 

--insert data from Table2 into Table1 if it doesn't already exist in Table1 
insert into #Table1 
select #Table2.* from #Table2 
left join #Table1 on #Table2.id = #Table1.id 
where #Table1.id is null 

--update data in Table1 from Table2 if it does already exist in Table1 
update #Table1 set value = #Table2.value 
from #Table2 
left join #Table1 on #Table2.id = #Table1.id 
where #Table1.id is not null 

select * from #Table1 
+0

謝謝。這也是很好的解決方案。 – user2040021

相關問題