我有一个使用sqlserver精简版和实体框架进行数据访问的c#项目。我需要向数据库插入或更新大量行(5000+或更多),因此,如果键存在,请更新记录(如果未插入)。我找不到紧凑型版本和EF做到这一点的方法,而没有糟糕的性能,即在一台核心i7计算机上花了2分钟以上的时间。我尝试搜索记录以查看它是否存在,然后插入(如果不存在)或更新(如果存在),搜索是该记录上的杀手kill。我曾尝试编译搜索查询,但这仅带来了很小的改进。我尝试过的另一件事是将记录插入try捕获中,如果更新失败,但这迫使我保存每条记录上的更改以获取异常,而不是在最后导致性能下降。显然我可以 不要使用存储过程,因为它是精简版。我也看过只是以某种方式直接在db上执行t- sql,但是紧凑的流程语句似乎可以排除这种情况。我已经遍历整个世界。如果我可以过分表达部署优势和防止用户深入数据库的能力,我真的想使用紧凑型。任何建议,将不胜感激。
谢谢
也许您可以通过使用简单的查询来获得想要的结果。假设您要插入或更新的表是这样的
TABLE original id integer, value char(100)
首先,您可以使用新值创建一个临时表(可以使用SELECT INTO或其他方式创建表)
TABLE temp id integer, value char(100)
现在,您需要做两件事,更新原始行,然后插入新值
UPDATE original SET original.value = temp.value FROM original, temp WHERE original.id = temp.id INSERT INTO original SELECT * from temp WHERE temp.id not IN (select o.id from original o)