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

sql-server-2008 - 我可以在更新 t-sql 中嵌套插入 t-sql 吗?

是否可以在更新语句中嵌套插入语句?

背景

merge第一次使用该子句来转换一些数据。也就是说,我有一个包含许多列的单个源表,但如果缺少更好的词,我需要转换为更结构化的模型/模式;类似于BI模型。我在 BI 建模方面也缺乏经验(现在才开始阅读它不到一个月)。任何帮助将不胜感激。

我很乐意提供可能需要帮助的任何其他信息。

错误:

消息 156,级别 15,状态 1,第 47 行
关键字“选择”附近的语法不正确。

消息 102,级别 15,状态 1,第 48 行
')' 附近的语法不正确。

这些是在我尝试插入 tertiary.WEBADDRESS行时抛出的。

代码:

0 投票
4 回答
25224 浏览

sql - Oracle MERGE - 如果不匹配,则在条件通过时更新

我需要将一些值合并到一个表中,当具有指定键的行已经存在时更新一个字段,或者如果它不存在则插入一个新行。

这是我的桌子:

在哪里:

我正在使用这个查询:

它可以工作,但即使active已设置为,它也会更新记录1

我想做的是这样的:

那可能吗?AFAIK 我不能把if这样的MERGE声明写成这样,那怎么办呢?

0 投票
1 回答
70 浏览

sql - 通过合并更新

我在创建程序时遇到了设计问题。

假设我必须使用同一行中其他列中的数据更新表中的所有行。说table1有 3 列AB并且C我需要将所有行更新为C=A+B. 所以我可以使用:

但我需要使用以下内容来执行此操作:

有没有办法通过操纵“一些查询”和“一些条件”来做到这一点?

0 投票
1 回答
468 浏览

sql - 从合并中获取主键的值

我有一个存储过程,它有一个 merge .. into 语句。我正在尝试从存储的过程中获取主键的值。

如果合并语句运行更新,我想将@NewCompanyID 设置为传递到存储过程(@CompanyID)的任何值。如果执行了插入语句,那么我想传递@@identity。我该怎么做呢?

0 投票
2 回答
1786 浏览

sql - 使用查找表中的值更新列

我在表中列出了产品,产品。这可能包含超过 500 万条记录。

prod_code 和 prod_region 不可为空。

我需要更新此表中的 prod_type,从另一个查找表 product_type 中进行选择。

在此表中,prod_region 可以为空。如果它为 null,则应将其解释为任何东西。

所以我更新的产品表应该是,

所需输出的解释。

  1. 对于 prod_code = 1001,product_type 中有两个整体。prod_type = 3 用于特定的 prod_region 'R1' 和 prod_type = 1 用于其余区域。因此,products 中的前两条记录应该分别得到 1 和 3。
  2. 对于 prod_code 1002、1003,product_type 表中没有指定 prod_region。因此,无论 prod_region 是什么,都会为第三和第四条记录分配 prod_type = 2。

由于ORA-30926: unable to get a stable set of rows in the source tables在 Oracle 或Failure 7547 Target row updated by multiple source rows.Teradata 中,以下合并语句失败。

寻找标准 SQL 或 Teradata 特定答案。

0 投票
0 回答
2213 浏览

sql-server - 使用 MERGE 进入带有 INSTEAD OF 触发器和 OUTPUT 子句的视图

我正在尝试在具有 INSTEAD OF 触发器的视图上使用 MERGE,并且还输出插入的标识值,但我收到错误“列引用”已插入。不允许任何内容,因为它引用基表在这个语句中没有被修改。每次我在 OUTPUT 子句中使用插入时似乎都会出错。

一个高度简化的例子:

我知道这个例子实际上并不需要 INSTEAD OF 触发器。如果没有触发器,它可以正常工作,但我的实际用例是从多个表中进行选择和更新。

我使用 MERGE 而不是普通的 INSERT/UPDATE 的原因是我想将标识值与未插入的键匹配。MERGE 让我这样做,但 INSERT 没有。

我正在使用 SQL Server 2012。

这可能吗?

0 投票
1 回答
1775 浏览

sql - SQL Server 合并 - 输出返回已插入的空删除行

我正在使用MERGE同步表中的数据,并且我看到 SQL Server 的一些错误(对我而言)行为。当我OUTPUT输入INSERTED.*值并删除了一行时,该MERGE命令返回一行,其中包含NULL已删除的每一行的所有列。

例如,采用以下架构:

我进行了数据的初始加载,所有 4 行都按预期输出。

现在,假设我从与表同步的数据中删除 2 行(在我的 CTE 中)并执行相同操作MERGE,我看到NULL返回的所有列中有 2 行。

对我来说,这似乎是错误的行为,因为 A)我没有删除任何已删除的行,并且 B)这看起来像是我将这两NULL行插入到我的表中,而我显然没有。任何人都可以对正在发生的事情有所了解吗?

0 投票
1 回答
1122 浏览

sql - 分页将批量数据插入表中

也许是一个愚蠢的问题,但是如何拆分/分页插入以让其他操作更新同一个表。

我有两个存储过程,一个插入批量数据

存储过程InsertIntoMyTable

的主键MyTable(Column1, Column2)

并且还可以MERGE对同一张表进行操作,MyTable但来自另一个来源,主要是更新(column3),但也可以将数据插入到MyTable.

问题是当插入MyTable需要大量时间 1000 万条记录时,执行的存储过程MERGE必须等到InsertIntoMyTable完成。

尝试解决此问题时,添加了分页

但仍然锁定表,直到操作结束。

注意:执行不在事务中。

0 投票
2 回答
69 浏览

sql - 表连接以获得结果

这是需要更新的表。

我有一个临时表,其中包含已更新用户的新值。

我想知道如何更新 TABLE A 以反映 TEMP TABLE 中的新值。预期结果将是:

我有两个想法是:

  • 删除然后插入。使用左连接确定哪些值不再存在,然后将其删除。然后使用右连接确定哪些值是新的,然后插入它们。
  • 也许我可以使用MERGE,但是我很确定如何实现它。

测试环境

编辑:以下解决方案从表 A 中删除 ID (1,2,3,4),但我只希望它删除 (2,3,4)。这是因为ID 1 已经存在于TABLE A 中,不需要删除再插入。

我有一个解决方案,但我发现它很混乱。有没有办法让它变得更好?

0 投票
1 回答
758 浏览

sql - Oracle SQL - 基于非唯一数据合并两个表

基本上是在寻找一种方法,将已填充错误数据的表与具有“修复”它的好数据的表合并,但我想要的好数据中有相当多的重复数据,我需要 GROUP 以便我可以有一些可以匹配的东西。

所以在这种情况下简化了:

因此,在此示例中,我尝试使用 Series Record 表中的 SERIES_ID 更新 Customer Records 表中的 SERIES_ID。我有我可以匹配的标题。

我尝试如下:

但是,当我这样做时,我得到:

任何想法?