问题标签 [sql-merge]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
7 回答
497632 浏览

oracle - ORA-30926: 无法在源表中获得一组稳定的行

我正进入(状态

ORA-30926: 无法在源表中获得一组稳定的行

在以下查询中:

我已经运行table_1它有数据,并且我运行了内部查询 ( src),它也有数据。

为什么会出现此错误,如何解决?

0 投票
1 回答
7630 浏览

sql - 合并与 UPSERT

我有一个我正在编写的应用程序可以访问 SQL 服务器后端。最常用的部分之一是用户选择问题的答案,然后触发存储过程,查看是否已经给出答案,是否执行 UPDATE,如果没有则执行 INSERT。

这工作得很好,但现在我们已经升级到 SQL Server 2008 express 我想知道重写这个 SP 以使用新的 MERGE 命令是否会更好/更快/更有效。

有谁知道这是否比执行 SELECT 后跟 INSERT 或 UPDATE 更快?

0 投票
2 回答
590 浏览

sql-server - 某处是否有“脚本表作为 - MERGE”功能?

在 SSMS 2008 R2 中,当我右键单击一个表时,我会看到“脚本表为”,然后是插入和更新选项。但是合并呢?合并实际上只是将两者结合在一起。

有什么工具可以添加该选项吗?(所以我可以编写一个合并语句,以便我添加源信息(有点像插入和更新脚本已准备好添加要插入或更新的数据)。

0 投票
1 回答
6111 浏览

tsql - SQL MERGE 语句中的 UPDATE-no-op

我有一个包含一些持久数据的表。现在,当我查询它时,我还有一个非常复杂的 CTE,它计算结果所需的值,我需要将缺失的行插入到持久表中。最后,我想选择由 CTE 标识的所有行组成的结果,但如果它们已经在表中,则包含表中的数据,并且我需要是否刚刚插入行的信息。

简化后的工作方式如下(如果您想尝试,以下代码将作为普通查询运行):

我不喜欢这个WHEN MATCHED THEN UPDATE部分,我宁愿把多余的更新放在一边,但是我没有得到OUTPUT子句中的结果行。

这是完成和返回数据的最有效方法吗?

或者是否会有更有效的解决方案MERGE,例如通过使用 a 预先计算结果,SELECT然后执行 aINSERT的行new=0?我很难解释查询计划,因为它基本上归结为“聚集索引合并”,与单独的SELECT后跟INSERT变体相比,这在性能方面对我来说非常模糊。而且我想知道 SQL Server(带有 CU1 的 2008 R2)是否真的足够聪明,可以看到它UPDATE是无操作的(例如,不需要写入)。

0 投票
1 回答
11376 浏览

c# - 实体框架中的合并

有没有办法从 .NET Entity framework 4调用T-Sql 的 MERGE命令?

0 投票
2 回答
30873 浏览

sql-server-2008 - SQL Server 中非常大的表的 UPDATE 或 MERGE

我需要每天更新一个非常大(300M 记录)和广泛的TABLE1. 更新的源数据位于另一个表UTABLE中,该表的行数为 10%-25%,TABLE1但很窄。两个表都record_id作为主键。

目前,我正在TABLE1使用以下方法重新创建:

但是,这在我的服务器上需要将近 40 分钟(SQL Server 需要 60GB 的 RAM)。我想实现 50% 的性能提升 - 我可以尝试哪些其他选项?

  1. MERGE并且UPDATE- 类似下面的代码仅适用于非常小的UTABLE表格 - 在全尺寸时,一切都挂起:

    /li>
  2. 我听说我可以使用 ROWCOUNT 执行批处理 MERGE - 但我认为它对于 300M 行表来说不够快。

  3. 任何有用的 SQL 查询提示?

0 投票
3 回答
275 浏览

mysql - 如何在 MySQL 中合并两个表以及表 1 是主表的位置

如何在 MySQL 中合并两个表?我已经查看了有关此主题的其他几篇文章,但它们对我来说不够详细。

我是 MySQL 新手,所以请耐心等待,我有一个主表和一个临时表,如下所示:

CREATE TABLE temp_import( id int(11) NOT NULL auto_increment,
Namevarchar(255) default NULL,
MerchantIDint(11) default NULL,
SKUvarchar(255) default NULL,
PRIMARY KEY ( id) ) ENGINE=MyISAM AUTO_INCREMENT=765811 DEFAULT CHARSET=utf8;

我将数据插入到临时表中,如下所示:

每个表格的表格格式都是一样的,但是数据会随着时间的推移而变化。有些项目的数据机会,但 SKU 保持不变。某些项目将不再提供,需要从数据库中删除。

例子:

当前数据库表:

新数据库表:

最终结果应该是

删除了鸡肉食品,添加了青蛙,更新了猫。

这也需要尽可能高效。我将处理一些大文件。它可以是 MySQL 唯一的代码。

http://www.xaprb.com/blog/2006/02/21/flexible-insert-and-update-in-mysql/ 我看过这个,但它在我头上,当我尝试这样做时它没有不工作...

0 投票
2 回答
7009 浏览

sql - 包含 AUTO_INCREMENT 列的 MERGE INTO 表

我已经声明了下表供审计触发器使用:

  1. 触发器将在同一个事务中被多次调用。

  2. 第一次调用触发器时,我希望它插入一个具有当前 TRANSACTION_ID() 和时间的新行。

  3. 随后调用触发器时,我希望它返回现有的“id”(我为此调用 Statement.getGeneratedKeys())而不更改“uuid”或“时间”。

当前的模式似乎有两个问题。

  1. 当我调用时,MERGE INTO audit_transaction_ids (uuid, time) KEY(id) VALUES(TRANSACTION_ID(), NOW())我得到:org.h2.jdbc.JdbcSQLException: Column "ID" contains null values; SQL statement: MERGE INTO audit_transaction_ids (uuid, time) KEY(id) VALUES (TRANSACTION_ID(), NOW()) [90081-155]

  2. 我怀疑在现有行上调用 MERGE 会改变“时间”。

我该如何解决这两个问题?

0 投票
1 回答
1689 浏览

sql-server - 典型发布上下文中的 T-SQL MERGE 性能

我的情况是,“发布者”应用程序通过查询非常复杂的视图,然后使用单独的插入、更新和删除操作将结果合并到非规范化视图模型表中,从而使视图模型保持最新。

现在我们已经升级到 SQL 2008,我认为现在是使用 SQL MERGE 语句更新这些的好时机。然而,在编写查询之后,MERGE 语句的子树成本是 1214.54!用旧方法,插入/更新/删除的总和只有 0.104!

我无法弄清楚描述相同确切操作的更直接的方式怎么会如此糟糕。也许你可以看到我看不到的错误。

表上的一些统计信息:它有 190 万行,每个 MERGE 操作插入、更新或删除超过 100 行。在我的测试用例中,只有 1 个受到影响。

那么这如何达到 1200 个子树的成本呢?从表本身访问数据似乎非常有效。事实上,MERGE 87% 的成本似乎来自链末端附近的排序操作:

合并 (0%) <- 索引更新 (12%) <- 排序 (87%) <- (...)

这种排序有 0 行进出它。为什么排序 0 行需要 87% 的资源?

更新

我在 Gist 中发布了仅 MERGE 操作的实际(非估计)执行计划。

0 投票
1 回答
3281 浏览

sql - 目标表上的合并语句和后触发器

我在目标表上有两个后触发器(一个用于插入,一个用于更新)。现在,如果我在目标表上执行合并,触发器只会执行一次。尽管合并语句执行了大约 300 次更新和 200 次插入。

我在每个触发器中使用打印语句检查了它,就在从已删除的数据中获取数据后,将记录插入到变量中。

怎么来的?这是一个错误吗?

我有 SQL Server 2008 sp1 std(SBS2k8 的一部分)。