3

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

例如:从table A(可以包含~10 kk 个条目)到table B,表是相同的,除了用于获取某些数据(边界)的table Ahas 。DateTimeStamp

所以我需要将数据从 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 = 3from删除行Table B并插入其他所有内容 from Table A

结果将是:

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

有没有优雅的方法来做到这一点?触发器太慢了,我正在寻找不需要临时表的解决方案。

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

4

4 回答 4

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
;
于 2012-05-29T09:40:47.193 回答
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)
于 2012-05-29T09:28:54.677 回答
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
于 2012-05-29T09:39:05.510 回答
0

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

您可以将 oledbsource 与查询 aF 一起使用。建议:

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

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

于 2012-05-29T10:02:01.740 回答