我创建了一个伪UPSERT语句,但是由于要插入或更新的数据可能非常大,为了减少网络带宽,我想只定义要更新或插入的数据一次。
为简洁起见,在我的例子中,我只包含2个字段,并且两者都有非常短的数据长度,但在实际系统中可能有数十个字段,其中一些字段可能很长。
MERGE PART AS T
USING (SELECT ID) AS S
ON(S.ID = T.ID)
WHEN MATCHED THEN UPDATE SET ID='ABCD-000',DESCRIPTION='NEW DESCRIPTION'
WHEN NOT MATCHED THEN INSERT (ID,DESCRIPTION) VALUES('ABCD-000','NEW DESCRIPTION');
在此示例中,ID是唯一的,如果存在,则应更新,如果不存在,则应插入新记录。
答案 0 :(得分:1)
您可以使用以下内容:
MERGE PART AS T
USING (
SELECT
'ABCD-000' as ID,
'NEW DESCRIPTION' NewDescription
) AS S
ON (S.ID = T.ID)
WHEN MATCHED THEN UPDATE SET T.DESCRIPTION=S.NewDescription
WHEN NOT MATCHED THEN INSERT (ID,DESCRIPTION) VALUES(S.ID, S.NewDescription);
此外,由于您的数学条件已为SET ID='ABCD-000'
,因此无需WHEN MATCHED THEN UPDATE
S.ID = T.ID
{/ 1}}。