我有一个行数在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 )
答案 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
解决方案的样子。另一个问题是样本数据和预期结果。