将信息从一个表插入到另一个表中我遇到了一个小问题。
例如:从table A
(可以包含~10 kk条目)到table B
,表格相同,只有table A
有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 = 3
删除Table B
行并插入Table A
中的所有其他内容。
结果将是:
Key | value
8 | 45
3 | 985
9 | 7457
2 | 123
5 | 1584
有优雅的方法吗?触发器太慢了,我正在寻找不需要临时表的解决方案。
欢迎使用SQL Server或SSIS解决方案\建议
答案 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