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

sql - 插入或更新表

我在一个文件中有一个 100k id 的列表。我想遍历这些 id:

对于每个id,检查是否id在表中:

  • 如果是,更新其updated_date标志
  • 如果没有,添加一条新记录(id, updated_date)

我研究并找到了MERGE条款。缺点是,MERGE要求 ids 在一个表中。我只允许在必要时创建一个临时表。

谁能指出我正确的方向?它必须是我可以在我的数据库上运行的脚本,而不是在代码中。

编辑:如果这是我唯一的选择,我现在可以使用临时表。

0 投票
0 回答
59 浏览

sql - 小表的 SQLServer 中的合并与更新

我有两个小表(~3K 行),我必须从另一个表更新一个表中的数据。我可以使用 MERGE 和 UPDATE 语句执行所需的操作。我应该更喜欢使用哪一个?如果我还必须支持可扩展性,即表格将来可以增长怎么办。

0 投票
1 回答
434 浏览

sql - “只能指定标识列的显式值......”在合并期间

有很多问题可以涵盖此错误,但我遇到的问题是:

A)我目前正在进行合并(带有插入)

B)我没有明确设置身份列!

我的存储过程(表名和属性混淆):

表定义

存储过程定义

据我所知,我没有在任何地方明确指定该IDENTITY列。我正在指定一个UNIQUE-ly 约束列。

最后,与错误所说的相反,指定IDENTITY_INSERT ON什么都不做。

编辑:我还应该指定,从.dacpac通过 C# 部署时出现此错误。

0 投票
2 回答
176 浏览

tsql - 使用 T-SQL Merge 更新现有记录并插入不存在但避免重复的记录

我有两个结构相同的表 t1 和 t2。
表 t1 比 t2 多出大约 100 多条记录。

这是 t1 的一个小样本。

和一个小样本 t2。

现在比较 t1 和 t2 显示 t1 中的 pid 值更多,Z41例如 tid 包括 1、2、3、4、5 和 11。但在 t2 中仅存在 1、2、3 和 11。

然而,t1 和 t2 之间的 startdate 完全不同,所以这会引起麻烦。下面是我尝试过的合并,但它基本上只是在 t2 中插入与 t1 不同的 startdate 的每一行。

通过此合并,我留下pid and tidupdtby列中显示“MERGEDINSERT”的重复项。但我想避免重复。

如何正确进行此合并以不产生重复项,但插入 t1 中存在但不存在于 t2 中的行,同时 amt, paymentdt, and paymentmnth在保持 startdate 的同时更新值?

0 投票
1 回答
895 浏览

sql - Oracle SQL 合并表而不指定列

我有一个people少于 100,000 条记录的表,并且我使用以下方法对该表进行了备份:

随着时间的推移,我向表中添加了一些新记录people,但最终我想将备份表中的记录合并到people. 不幸的是,我不能简单地DROP使用我的表,因为我的新记录将会丢失!

因此,我想根据主键people使用来自 的记录来更新表中的记录,并且我找到了两种方法来做到这一点:people_backupid

  1. 表合并在一起
  2. 使用某种花哨的相关更新

伟大的!但是,这两种方法都使用SET并让我指定要更新的列。不幸的是,我很懒,结构people可能会随着时间而改变,虽然我的CTAS语句不需要更新,但我的更新/合并脚本需要更改,这对我来说感觉像是不必要的工作。

有没有办法合并整行而不必指定列?我在这里看到,在遗嘱中不指定列INSERT将直接 SQL 按顺序插入值,可以在这里应用相同的方法,这安全吗?

注意:表的结构在备份之间不会改变

0 投票
1 回答
738 浏览

sql - oracle合并命令错误缺少关键字

我正在尝试合并 oracle 中的两个表,我使用的查询是

每当我执行此查询时,我都会收到以下错误:

ORA-00905 缺少关键字。

谁能帮我这个。

0 投票
1 回答
7967 浏览

oracle - 在 Oracle 的 PL/SQL 中使用行类型变量合并?

bar使用类型的变量,foo%ROWTYPE我可以在 PL/SQL 中INSERT同时执行以下操作:UPDATE

但是我该怎么做MERGE?以下方法会生成以下错误消息:

PL/SQL: ORA-00942: 表或视图不存在

0 投票
1 回答
130 浏览

oracle - 在插入语句中使用新记录上的链接进行合并时 Oracle 11g 错误

我有两张桌子:

和内容:

当我运行下一个脚本时:

我看到错误:

但是当我跑步时:

有用。

为什么新记录上的链接在更新语句中有效,但在插入语句中无效?

0 投票
1 回答
1922 浏览

greenplum - Greenplum 数据库 4.3.5.1 build 1 是否支持 MERGE

我正在尝试为 Greenplum DB 创建合并语句,但出现语法错误。所以我想知道我写它的方式是否支持 MERGE。

我有两种方法方法1-

方法二:

有没有其他方法或我的语法本身有问题?

0 投票
0 回答
350 浏览

sql - 多个更新语句与单个更新/合并语句

我有一个 Unix Shell 脚本,它使用“awk”命令逐行处理平面文件并更新 Oracle 数据库表。它通过为每一行打印一个更新命令并将其通过管道传输到这样的文件来做到这一点 -

然后使用 SQLPLUS 运行该文件,如下所示 -

$ORACLE_HOME/bin/sqlplus admin/pass@word1 @$SYNC_PATH/$DATETIME/$filename

更新:我正在将所有这些迁移到 Windows Server 2012\Sql Server 2012\SSIS 环境。

我想将此过程转换为 SSIS 包。我有两个选择——

  • 在 SSIS 中复制与上述相同的逻辑,即从平面文件中逐行读取并创建一个包含更新语句的“.sql”文件,我可以使用“执行 SQL 任务”运行该文件
  • 将平面文件中的批量插入到数据库上的暂存表中,并使用更新/加入或合并语句来更新我的目标表。

哪一个是更好的选择?在两个操作完成后目标表中的数据相同的意义上,这两种方法在功能上是否相同。