Sql server 2008 大量数据传输

Sql server 2008 大量数据传输,sql-server-2008,Sql Server 2008,我有两个表A和B。表A有36460090条记录,而表B的记录比表A少。表B是表A的子集。我只想将表A中不在表B中的记录传输到表B。两个表中都没有主键。表A和表B也可能包含重复的记录。 我如何进行此转移? 代码如下: select a.* , b.id into #temp from TableA a left join TableB b on a.id=b.id , a.var1=b.var1 ,a.var2=b.var2 .... , a.var12=b.var12 要选择a中不在b

我有两个表A和B。表A有36460090条记录,而表B的记录比表A少。表B是表A的子集。我只想将表A中不在表B中的记录传输到表B。两个表中都没有主键。表A和表B也可能包含重复的记录。 我如何进行此转移? 代码如下:

select a.* , b.id 
into #temp 
from TableA a 
left join TableB b 
on a.id=b.id , a.var1=b.var1 ,a.var2=b.var2 .... , a.var12=b.var12

要选择a中不在b中的行,请执行以下操作:

select a.*
from a
where a.id in(select id from a
              except
              select id from b); 
第二种解决方案:

select a.*
from a
where not exists(select 1
                 from b
                 where b.id = a.id);

您能显示您尝试过的代码吗?从表a中选择a.*,b.id进入#temp左连接表b上的a.id=b.id,a.var1=b.var1,a.var2=b.var2,a、 var12=b.var12现在#temp包含的记录比TableA多,您可能知道为什么会这样that@abdulsammad,您应该将您的代码放在问题中。谢谢!关于解决方案有什么建议吗@hossWithout primary key最有效的方法可能是截断表B并将A中的所有内容复制到空B中。如果Id不是主键,这会起作用吗?这意味着不同的记录可能有相同的Id值@Stevanuz只要两个表都有id列和兼容的数据类型,则set操作应该可以工作。就没有索引的性能而言,它不会执行得很好,因为它只会扫描。如果A中有两条id为2的记录,但B中有一条id为2的记录,则此语句将不会选择id为2的A的第二条记录。您是对的,它们只返回distinct,不幸的是,除sql servertry中的all外,其他都不存在,它将从一个文件中返回副本