【问题标题】:update existing column values and insert new in record doesn't exist in SQL when importing from CSV从 CSV 导入时,SQL 中不存在更新现有列值和插入新记录
【发布时间】:2016-10-11 22:33:45
【问题描述】:

你能帮我关注吗?

我们有在 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 的值更新类别,如果我们找不到工资类别而不是将其作为该员工的新类别插入并从CSV。

请帮忙。

【问题讨论】:

  • 我建议将整个 Excel CSV 按原样加载到保存表中。然后您可以进行一些查询以确定需要插入或更新的确切内容。
  • 由于我是 SQL 新手,你能举个例子吗?
  • 通过加入查找更新。 SO 不是编码服务。
  • Google SSIS UPSERT 你会找到例子。
  • 谢谢狗仔队,让我振作起来。我以您的评论为灵感并解决了问题。我很快就会发布它。

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


【解决方案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

【讨论】:

  • 谢谢。这也是一个不错的解决方案。
猜你喜欢
  • 2022-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-24
相关资源
最近更新 更多