【发布时间】:2017-06-14 09:08:10
【问题描述】:
此时源表和目标表具有三列“ID”、“ST”和“ADD”。 'ADD' 允许为空
使用 SQL Server 合并 语句,我想将源表中所做的更改放到目标中。 要求:
- 如果 ID 在源中可用但在目标中不可用,则 插入 一个新的 目标中的行
- 对于源和目标中可用的任何 ID,如果 只有 ADD 是 在源中更改,然后在目标中插入新行。即如果 ADD 为 ID=2 更改了两次,然后我们将在目标中为 ID=2 设置三行(原始 + 两次更改),因为我们每次都插入新行 时间
- 对于源和目标中可用的任何 ID,如果仅ST 源中的更改,然后 ST 的修改值应更新 目标中匹配 ID 的所有行
- 对于任何ID在源和目标中都可用,如果ST和 ADD 源中的更改,然后应该为新的 ADD插入新行,并且应该为该 更新所有旧行ID 更新值为ST
我可以通过 SQL Server 合并来实现这一点吗?如果没有,我们有什么替代方案?
【问题讨论】:
-
据我所知,
MERGE只能给你when match和when not match,意思是只能区分1和其余,不能区分2、3,或 4. -
有可能,您是否在目标表上定义了任何主键。您希望 ST 列是唯一的吗?
-
@BHouse 在源表中的“ID”是主键。它适用于它,因为信息仅在源表中更新。由于我们想在目标中为相同的“ID”插入多条记录,因此目标表将具有单独的列作为主键,即“TargetID”。 ST也不是唯一的。它将具有值“A”或“I”。
标签: sql sql-server