删除插入后将存在的重复条目

时间:2012-05-29 09:24:46

标签: sql-server-2008 ssis

将信息从一个表插入到另一个表中我遇到了一个小问题。

例如:从table A(可以包含~10 kk条目)到table B,表格相同,只有table ADateTimeStamp用于获取某些数据(边界)。

所以我需要将数据从A移到B(没有DateTimeStamp)并从B中删除重复项。

示例:

表A

DateTimeStamp | Key | value 
2012-02-03    |  2  | 123
2012-02-03    |  3  | 985
2012-02-03    |  5  | 1584

表B

Key  | value 
  8  | 45
  3  | 785
  9  | 7457

因此,我需要从Key = 3删除Table B行并插入Table A中的所有其他内容。

结果将是:

Key  | value 
  8  | 45
  3  | 985
  9  | 7457
  2  | 123
  5  | 1584

有优雅的方法吗?触发器太慢了,我正在寻找不需要临时表的解决方案。

欢迎使用SQL Server或SSIS解决方案\建议

4 个答案:

答案 0 :(得分:3)

如果您使用的是SQL Server 2008 或更新版本,则可以使用单个MERGE语句轻松完成此操作 - 如下所示:

MERGE INTO dbo.B                -- target table
USING A ON b.Key = a.Key        -- source table and "link" information
WHEN MATCHED 
    THEN UPDATE SET B.Value = A.Value   -- if "Key" already present in B - update "Value"
WHEN NOT MATCHED                        -- if "Key" not present in B - insert new row
    THEN INSERT(TblKey, TblValue) VALUES(A.TblKey, A.TblValue) 
WHEN NOT MATCHED BY SOURCE
    DELETE                              -- if present in B, but not in A -> remove
;

答案 1 :(得分:1)

两个步骤:

-- first delete
delete tableB
from tableB b
inner join tableA a on b.Key = a.Key

-- then insert
insert into tableB
select a.Key, a.Value from tableA a where a.Key not in (select b.Key from tableB b)

答案 2 :(得分:0)

试试这个:

从表B​​中删除重复项:

    delete FROM tableB Where tableB.Key IN
    (select Key
    from tableA 
    INTERSECT
    select Key
    from tableB) 

然后,插入表B:

 insert INTO tableB (Key, Value)
select Key, Value From tableA

答案 3 :(得分:0)

尽管这里介绍的所有解决方案似乎都有效,但我真的会建立一个包含10kk行的表来处理它。

你可以使用带有查询aF的oledbsource。提示:

select a.Key, a.Value 
from tableA a 
where a.Key not in (select b.Key from tableB b)

并将其直接发送到指向表B的oledbdestination