当前位置: 首页 > 面试题库 >

在SQL Server精简版上执行插入或更新(向上更新)

杜霍英
2023-03-14
问题内容

我有一个使用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)


 类似资料:
  • 问题内容: 我正在尝试使用SQLAlchemy模块(而不是SQL!)在python中编写大量upsert。 我在SQLAlchemy添加上遇到以下错误: 我有一个称为列的主键的表。 在此示例中,我已经在数据库中使用了一行。当我尝试将新对象设置为时,出现上述错误。我的印象是,如果主键已经存在,记录将得到更新。 我如何仅基于主键就可以对Flask-SQLAlchemy进行增补? 有没有简单的解决方案?

  • 我想根据文档id和元素id向上插入数组中的元素。当前,只有当数组中的元素已准备就绪时,它才起作用(更新有效,插入无效)。 因此,这些集合: 收到此请求: 将给出此ok结果: 如何使相同的请求适用于这些初始集合: 或 如何使upert工作?upert仅适用于整个文档吗?目前,我面临这个错误: 位置运算符未从查询中找到所需的匹配项。 谢谢

  • 问题内容: 我有一张桌子,就是PK。当我插入行时,将有重复的键,并且我需要总结三个统计信息。我在Java中对PreparedStatement使用以下查询: 是否有更简洁的查询来实现?因为我简化了查询,所以那里有十多个统计信息。 问题答案:

  • 问题内容: 我有一个Excel文件,我想更新工作表中的多行。所以我写了这段代码: 我得到这个错误: 查询表达式’id = 1更新[Data14City $]中的语法错误(缺少运算符),设置B_1_1 = 0,B_1_2 = 8,B_1_3 = 17,B_1_4 = 0,其中id = 2’。 当我添加到此行时: 我收到此错误: SQL语句结束后找到的字符。 如何在Excel中执行多条语句? 谢谢 问

  • 问题内容: 有没有办法像在MySQL服务器上那样批量执行查询? 将无法使用,因为如果该字段已经存在,它将直接忽略该字段并且不插入任何内容。 将无法工作,因为如果该字段已经存在,它将首先对其进行处理,然后再次进行处理,而不是对其进行更新。 可以使用,但不能批量使用。 因此,我想知道是否可以批量发出这样的命令(一次不止一次发送)。 问题答案: 您 可以 使用INSERT … ON DUPLICATE

  • 我有一个由Access DB使用ResultSet&填充的JTable。我有一个方法可以正确地从数据库中删除记录,但在刷新表模型的当前视图时遇到了困难。我看过类似的帖子,并尝试使用和,但没有成功。我还注意到其他帖子提到了的使用,因为它有add/remove行方法,但我使用的代码来自我去年使用的Java教科书(教授从未达到这一点,所以我试图自己学习)... 以下是定制JFrame的类: 下面是Abs