2016-06-10 38 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

相关问题