从CSV

时间:2016-06-10 20:55:04

标签: sql-server tsql reporting-services ssis etl

你能帮我跟进吗?

我们有在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表中的FK。

所以我的最终结果应该在数据库和前端看起来像这样。

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 个答案:

答案 0 :(得分: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