2016-09-24 76 views
0

我有一个行数在8000到10000之间的excel文件。我将它转换为c#中的xml并将它传递给存储过程以将其插入到表中。在sql server中插入批量数据,同时忽略/捕获重复行

插入数据时,如果有一个条目已经存在于数据库中我想忽略/捕获它,而不插入其他行而不打破插入。

我认为的一种解决方案是在表上创建一个插入触发器来检查该行是否已经存在于表中,但这种方法对于10,000行是非常昂贵的。

还有什么办法呢?下面是手短码

SELECT @sql = N' 
    INSERT INTO Expenses ('+ STUFF(@col,1,1,'') +') 
    SELECT ' + STUFF(@col,1,1,'') + ' 
    FROM #TEMPTABLE t 
    PIVOT (
     MAX([Value]) FOR AttributeName IN (' + STUFF(@col,1,1,'')+') 
    ) as pvt' 

    EXEC (@sql) 

回答

1

如果你只关心表中已经重复的项目,你可以做这样的事情:

with p as (<your pivot here>) 
    insert into Expenses (. . .) 
     select p.* 
     from p 
     where not exists (select 1 
          from Expenses e 
          where e.entry = p.entry 
         ); 

这为您的特定情况下工作好 - 调查已经在表格中并避免它们的条目。但是,它不会删除临时表中的重复项。此外,它不会将Expenses中已有的数据与新数据组合在一起。我想你真的想要merge。如果上述问题没有解决您的问题,请询问另一个问题。此问题未提供足够的信息来解释merge解决方案的外观。另一个问题会有样本数据和期望的结果。

+0

我很好,没有从临时表中删除重复的数据。我想要的是将重复数据分别捕获到某处,以将其传回给用户。您的解决方案可以帮助我插入非重复的数据,但我如何存储重复的行? – user728630

+0

@ user728630。 。 。你的问题是“我想忽略”,这是这样做的。如果你想做其他事情,那么编写一个查询来查找重复的行并返回它们。 。 。作为一个单独的步骤。 –

相关问题