【发布时间】:2020-01-16 13:36:27
【问题描述】:
具有非身份主键的表。所以每当我们插入新记录时,我们也必须传递主键。
当使用 Merge 语句不匹配记录时,我必须插入到上表中。但问题是我无法为每个插入增加主键。它抛出不能在主键列中插入重复项。 请在下面找到示例合并查询。
是否可以通过递增主键插入多行。
MERGE DBO.Table1 T1
USING (DBO.Table2 )T2
ON (T1.ID = T2.ID)
WHEN MATCHED
THEN UPDATE SET
T1.CURVE = T2.CURVE
WHEN NOT MATCHED
THEN INSERT (ID, CURVE )
Values ( T2.ID, T2.CURVE);
【问题讨论】:
-
您的 RDBMS 是什么(MS Sql、Oracle 等)?
-
@DmitryBychenko 这是一个 MS SQL
-
首先,您在 T2.ID 上合并,但插入 VALUES(T2.ProductID ...,这是一个错字吗?如果不是,那可能是您的问题,这并没有说明 T2。 ProductID 是否已经存在。其次,您确定 T2.ID(或 ProductID)满足主键(唯一,非空)的要求吗?
-
@RobertSheahan 对不起,这是我的错误。它是 T2.ID。是的,如果条件匹配,则匹配的行将得到更新,但对于那些条件不匹配的行,我得到不能插入重复错误。希望我回答了你的问题。如果您需要更多详细信息,请告诉我。
标签: sql sql-server sql-merge