在sql server中插入批量数据,同时忽略/捕获重复的行

时间:2016-09-24 13:35:07

标签: sql-server xml

我有一个行数在8000 - 10000之间的excel文件。我将它转换为c#中的xml并将其传递给存储过程以将其插入到表中。

插入数据时,如果数据库中已存在一个条目,我想在插入其余行时忽略/捕获它,而不会破坏插入。

我认为其中一个解决方案是在表上创建一个插入触发器,以检查表中是否已存在该行,但这种方法对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 个答案:

答案 0 :(得分: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解决方案的样子。另一个问题是样本数据和预期结果。