问题标签 [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.
sql-server-2008 - 我可以在更新 t-sql 中嵌套插入 t-sql 吗?
是否可以在更新语句中嵌套插入语句?
背景:
我merge
第一次使用该子句来转换一些数据。也就是说,我有一个包含许多列的单个源表,但如果缺少更好的词,我需要转换为更结构化的模型/模式;类似于BI
模型。我在 BI 建模方面也缺乏经验(现在才开始阅读它不到一个月)。任何帮助将不胜感激。
我很乐意提供可能需要帮助的任何其他信息。
错误:
消息 156,级别 15,状态 1,第 47 行
关键字“选择”附近的语法不正确。消息 102,级别 15,状态 1,第 48 行
')' 附近的语法不正确。
这些是在我尝试插入 tertiary.WEBADDRESS行时抛出的。
代码:
sql - Oracle MERGE - 如果不匹配,则在条件通过时更新
我需要将一些值合并到一个表中,当具有指定键的行已经存在时更新一个字段,或者如果它不存在则插入一个新行。
这是我的桌子:
在哪里:
我正在使用这个查询:
它可以工作,但即使active
已设置为,它也会更新记录1
。
我想做的是这样的:
那可能吗?AFAIK 我不能把if
这样的MERGE
声明写成这样,那怎么办呢?
sql - 通过合并更新
我在创建程序时遇到了设计问题。
假设我必须使用同一行中其他列中的数据更新表中的所有行。说table1
有 3 列A
,B
并且C
我需要将所有行更新为C=A+B
. 所以我可以使用:
但我需要使用以下内容来执行此操作:
有没有办法通过操纵“一些查询”和“一些条件”来做到这一点?
sql - 从合并中获取主键的值
我有一个存储过程,它有一个 merge .. into 语句。我正在尝试从存储的过程中获取主键的值。
如果合并语句运行更新,我想将@NewCompanyID 设置为传递到存储过程(@CompanyID)的任何值。如果执行了插入语句,那么我想传递@@identity。我该怎么做呢?
sql - 使用查找表中的值更新列
我在表中列出了产品,产品。这可能包含超过 500 万条记录。
prod_code 和 prod_region 不可为空。
我需要更新此表中的 prod_type,从另一个查找表 product_type 中进行选择。
在此表中,prod_region 可以为空。如果它为 null,则应将其解释为任何东西。
所以我更新的产品表应该是,
所需输出的解释。
- 对于 prod_code = 1001,product_type 中有两个整体。prod_type = 3 用于特定的 prod_region 'R1' 和 prod_type = 1 用于其余区域。因此,products 中的前两条记录应该分别得到 1 和 3。
- 对于 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 特定答案。
sql-server - 使用 MERGE 进入带有 INSTEAD OF 触发器和 OUTPUT 子句的视图
我正在尝试在具有 INSTEAD OF 触发器的视图上使用 MERGE,并且还输出插入的标识值,但我收到错误“列引用”已插入。不允许任何内容,因为它引用基表在这个语句中没有被修改。每次我在 OUTPUT 子句中使用插入时似乎都会出错。
一个高度简化的例子:
我知道这个例子实际上并不需要 INSTEAD OF 触发器。如果没有触发器,它可以正常工作,但我的实际用例是从多个表中进行选择和更新。
我使用 MERGE 而不是普通的 INSERT/UPDATE 的原因是我想将标识值与未插入的键匹配。MERGE 让我这样做,但 INSERT 没有。
我正在使用 SQL Server 2012。
这可能吗?
sql - SQL Server 合并 - 输出返回已插入的空删除行
我正在使用MERGE
同步表中的数据,并且我看到 SQL Server 的一些错误(对我而言)行为。当我OUTPUT
输入INSERTED.*
值并删除了一行时,该MERGE
命令返回一行,其中包含NULL
已删除的每一行的所有列。
例如,采用以下架构:
我进行了数据的初始加载,所有 4 行都按预期输出。
现在,假设我从与表同步的数据中删除 2 行(在我的 CTE 中)并执行相同操作MERGE
,我看到NULL
返回的所有列中有 2 行。
对我来说,这似乎是错误的行为,因为 A)我没有删除任何已删除的行,并且 B)这看起来像是我将这两NULL
行插入到我的表中,而我显然没有。任何人都可以对正在发生的事情有所了解吗?
sql - 分页将批量数据插入表中
也许是一个愚蠢的问题,但是如何拆分/分页插入以让其他操作更新同一个表。
我有两个存储过程,一个插入批量数据
存储过程InsertIntoMyTable
:
的主键MyTable
是(Column1, Column2)
并且还可以MERGE
对同一张表进行操作,MyTable
但来自另一个来源,主要是更新(column3),但也可以将数据插入到MyTable
.
问题是当插入MyTable
需要大量时间 1000 万条记录时,执行的存储过程MERGE
必须等到InsertIntoMyTable
完成。
尝试解决此问题时,添加了分页
但仍然锁定表,直到操作结束。
注意:执行不在事务中。
sql - 表连接以获得结果
这是需要更新的表。
我有一个临时表,其中包含已更新用户的新值。
我想知道如何更新 TABLE A 以反映 TEMP TABLE 中的新值。预期结果将是:
我有两个想法是:
- 删除然后插入。使用左连接确定哪些值不再存在,然后将其删除。然后使用右连接确定哪些值是新的,然后插入它们。
- 也许我可以使用MERGE,但是我很确定如何实现它。
测试环境
编辑:以下解决方案从表 A 中删除 ID (1,2,3,4),但我只希望它删除 (2,3,4)。这是因为ID 1 已经存在于TABLE A 中,不需要删除再插入。
我有一个解决方案,但我发现它很混乱。有没有办法让它变得更好?
sql - Oracle SQL - 基于非唯一数据合并两个表
基本上是在寻找一种方法,将已填充错误数据的表与具有“修复”它的好数据的表合并,但我想要的好数据中有相当多的重复数据,我需要 GROUP 以便我可以有一些可以匹配的东西。
所以在这种情况下简化了:
因此,在此示例中,我尝试使用 Series Record 表中的 SERIES_ID 更新 Customer Records 表中的 SERIES_ID。我有我可以匹配的标题。
我尝试如下:
但是,当我这样做时,我得到:
任何想法?