问题标签 [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 投票
4 回答
22963 浏览

sql - SQL MERGE 到远程(链接)服务器表

是否可以在链接服务器的数据库表上使用 SQL MERGE 功能?最终目标是将远程表与我们的本地 SQL 服务器表同步。我在网上做了一些研究,找不到任何相关信息。如果可能,您将如何设置源语句和目标语句?

0 投票
1 回答
1586 浏览

sql-server - SQL Server 批量插入/更新:检查源中是否存在重复记录

我有以下表格加入 idProduct = id (一对一):

产品

  • idProduct
  • 描述

产品密钥

  • ID
  • 产品密钥

我需要在 Products 表上为单个和批量插入和更新创建触发器,该触发器根据产品描述更新产品的 ProductKeys 中的键。

如果产品有密钥,则将密钥更新为描述,否则插入新密钥。

每个产品的产品密钥必须是唯一的。

因此,如果其他产品的密钥已存在,请将 idProduct 附加到描述以创建密钥。

我的问题:

我有用于插入和更新的触发器,除了插入或更新具有相同描述的 2 种不同产品的情况。在这种情况下,为两种产品生成的密钥是相同的。

有任何想法吗?

这是我使用 MERGE 语句的触发器:

0 投票
1 回答
5858 浏览

sql - 使用连接更新会抛出“MERGE 语句多次尝试更新或删除同一行。”

我有一个带有 JOIN 的 UPDATE 查询,它抛出以下错误:

MERGE 语句多次尝试更新或删除同一行。当目标行匹配多个源行时会发生这种情况。MERGE 语句不能多次 UPDATE/DELETE 目标表的同一行。优化 ON 子句以确保目标行最多匹配一个源行,或使用 GROUP BY 子句对源行进行分组。

这是我的更新声明:

产品通过 SKU 和 idManufacturer 加入#priceupdates。

我的 #priceupdates 表中没有重复项或 NULL。

编辑:

为了证明这一点,我运行了以下 2 条语句,它们都返回了相同数量的记录:

结束编辑

根据#priceupdates 中的数据,它会或不会抛出错误,但我很难找到哪些数据是问题的根源。

那么,除了重复之外,还有哪些其他因素会导致此错误?

任何帮助表示赞赏。

编辑2:

这是测试数据。我不能给你一个重现,因为正如我所说,我找不到哪些数据给我带来了问题。

更新!

我找到了罪魁祸首。当我从 priceupdates 表中排除特定记录时,它可以工作!但我仍然不知道那张唱片有什么问题。我从这里去哪里?注意:当我包含该记录时,更新也有效。

0 投票
3 回答
68 浏览

mysql - 使用 SQL GROUP BY 时合并

我在 mySQL DB 中的数据看起来像这样(但不仅是这 4 个,我还有很多人出现不止一次,但具有不同的资格和不同的修改日期

我在我的数据库中的数据

选择将类似于:

所以,如果我做出这个选择并按 person_id 分组,我会得到这样的结果:

我选择一组后的结果

有没有可能按人员ID分组,但要说:好的,给我最后修改的资格?通常我没有person_idwhere SQL 语句。
所以我想要我选择的所有人,但只有最后修改的资格的结果
(我希望我解释得很好,这样你就明白问题是什么了)

(我的选择当然比我展示的要复杂得多,这只是为了向您展示我在做什么)

0 投票
1 回答
2503 浏览

sql - MERGE 自加入 SQL Server

我在 SQL Server 2008 上使用 MERGE 命令来插入/更新表中的一行。但是目标表和源表是相同的。所以我想验证该行是否存在更新它在同一个表中,或者插入它。但是,我无法使用以下脚本实现插入。

有人能指出发生了什么问题吗?

Runnig 这说:0 行受影响。

0 投票
1 回答
4989 浏览

sql-server - 从 SSIS 运行时,存储过程返回架构版本更改错误,但在直接运行时不返回

我有一个 SQL Server 存储过程,每次使用 手动运行时都能正确执行EXEC,但是当它作为 SSIS 包的一部分运行时,它会失败并出现如下错误:

该过程是MERGE将视图中的数据合并到与 SP 位于同一服务器上的另一个数据库中的表中的语句。

视图是指链接服务器OtherServer。链接服务器上引用的数据库每晚都会被删除并重新创建。

到目前为止,我已经尝试过这些事情:

1) 在运行 MERGE 之前删除并重新创建视图。

2) 定义包含 MERGE 的 SP WITH RECOMPILE

3) 将 MERGE 语句包装进去,EXEC()这样它就不会被提前编译。

4)Bypass Prepare在 SSIS 中的相关步骤上设置为 true。

编辑

带有存储过程的服务器正在运行 SQL Server 2008。链接服务器是 2008 R2。

0 投票
1 回答
3422 浏览

sql - Oracle SQL 合并语句问题

我有一个看起来或多或少类似于下面的 sql -

当我通过直接将 some_date 替换为 sysdate 来运行上述查询时,它执行时没有错误。但是我替换了 using 子句中的 sysdate 并尝试动态使用它,但出现以下错误。我得到一个例外如下 -

这是oracle中的已知错误吗?什么是替代品?

更新:修正了一个错字!

0 投票
1 回答
1152 浏览

tsql - 带有外键的表上的 SQL 合并语句和解决死锁

我有几个 MERGE 语句,我在 ADO.NET 代码中的事务内执行。

第一个表的 ID 将在插入表时自动分配。第二个表确实有一个外键约束,这就是为什么我在我的插入语句中有这个选择。

匹配实际上是基于一些自然键,因为代理键没有暴露在应用程序之外。

MERGE 语句看起来像这样。

在多个并行事务中运行这些语句时,表上会发生死锁。通过添加行锁提示,我能够减少插入时的一些死锁,但更新语句总是会导致问题。

我不是数据库优化方面的专家,很难找出发生了什么以及如何改进它。有人对这些问题有一些专业意见吗?

0 投票
2 回答
28262 浏览

sql - 基本合并到同一张表中

我想要做的是将不同版本插入/更新到产品表中。这是一个 PL/SQL 块,我有一个保存版本号的变量。假设版本是 10。现在,我想使用合并语句为同一产品插入或更新版本 11 - 15。所以,我需要检查表中现有的产品和版本(我有 product_id)。我需要生成数字 11 到 15 并将其与 product_id 一起对照表进行检查。所以,我的问题是在 using 子句中 - 我需要使用包含 10 的临时变量生成版本号(11-15),并作为我的第二列(版本)进行补充。请根据我的要求更新我在下面的基本 MERGE 语句。谢谢。

0 投票
6 回答
312929 浏览

postgresql - How to UPSERT (MERGE, INSERT ... ON DUPLICATE UPDATE) in PostgreSQL?

A very frequently asked question here is how to do an upsert, which is what MySQL calls INSERT ... ON DUPLICATE UPDATE and the standard supports as part of the MERGE operation.

Given that PostgreSQL doesn't support it directly (before pg 9.5), how do you do this? Consider the following:

Now imagine that you want to "upsert" the tuples (2, 'Joe'), (3, 'Alan'), so the new table contents would be:

That's what people are talking about when discussing an upsert. Crucially, any approach must be safe in the presence of multiple transactions working on the same table - either by using explicit locking, or otherwise defending against the resulting race conditions.

This topic is discussed extensively at Insert, on duplicate update in PostgreSQL?, but that's about alternatives to the MySQL syntax, and it's grown a fair bit of unrelated detail over time. I'm working on definitive answers.

These techniques are also useful for "insert if not exists, otherwise do nothing", i.e. "insert ... on duplicate key ignore".