微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何同时插入和更新

如何解决如何同时插入和更新

我有一个包含 1 个以上值的源表,我的目标是在执行查询的同时插入和更新我的目标值。

首先,如果源表在目标表中找到相同的值,则更新它,但如果不存在,则插入数据。

显然,当我使用 MERGE 时,它只会更新相同的值,但不会插入新值:

MERGE merchant_negative_db_copy as MasterTb
USING merchant_negative_db_History AS SourceTb
      ON SourceTb.id_merchant = MasterTb.id_merchant

WHEN MATCHED THEN 
    UPDATE SET MasterTb.Nama_Pemilik = SourceTb.Nama_Pemilik,MasterTb.Alamat_Pemilik = SourceTb.Alamat_Pemilik,MasterTb.Telp_Merchant = SourceTb.Telp_Merchant,MasterTb.Nama_Merchant = SourceTb.Nama_Merchant,MasterTb.Alamat_Merchant = SourceTb.alamat_merchant,MasterTb.upload_by = SourceTb.upload_by,MasterTb.upload_date = SourceTb.upload_date

WHEN NOT MATCHED THEN
    INSERT (Nama_Pemilik,Alamat_Pemilik,Telp_Merchant,Nama_Merchant,Alamat_Merchant,id_merchant,upload_by,upload_date,flag_merchant)
    VALUES (SourceTb.Nama_Pemilik,SourceTb.Alamat_Pemilik,SourceTb.Telp_Merchant,SourceTb.Nama_Merchant,SourceTb.alamat_merchant,SourceTb.id_merchant,SourceTb.upload_by,SourceTb.upload_date,0);

关于如何同时插入和更新的任何建议,逐个检查数据是最后一个选项,除非可以使用合并?

编辑

我尝试更改“ON”条件但显示一些错误(值已存在并添加新值)

MERGE merchant_negative_db_copy as MasterTb
USING merchant_negative_db_History AS SourceTb
ON MasterTb.Nama_Pemilik = SourceTb.Nama_Pemilik AND MasterTb.Alamat_Pemilik = SourceTb.Alamat_Pemilik
WHEN MATCHED THEN 
    UPDATE SET MasterTb.Nama_Pemilik = SourceTb.Nama_Pemilik,MasterTb.upload_date = SourceTb.upload_date
WHEN NOT MATCHED THEN
    INSERT (Nama_Pemilik,0);

错误

The MERGE statement attempted to UPDATE or DELETE the same row more than once. This happens when a target row matches more than one source row. A MERGE statement cannot UPDATE/DELETE the same row of the target table multiple times. Refine the ON clause to ensure a target row matches at most one source row,or use the GROUP BY clause to group the source rows.

表源

CREATE TABLE [dbo].[merchant_negative_db_History](
    [id] [bigint] IDENTITY(1,1) NOT NULL,[Activity] [varchar](100) NULL,[id_merchant] [int] NULL,[Nama_Pemilik] [varchar](100) NULL,[Alamat_Pemilik] [varchar](255) NULL,[Telp_Merchant] [varchar](50) NULL,[upload_by] [varchar](20) NULL,[upload_date] [datetime] NULL,[approval_by] [varchar](20) NULL,[approved_date] [datetime] NULL,[nama_file] [varchar](200) NULL,[Flag_approval] [int] NULL,[alamat_merchant] [varchar](200) NULL,[Nama_Merchant] [varchar](200) NULL
)

表目标

CREATE TABLE [dbo].[merchant_negative_db_copy](
    [id] [bigint] IDENTITY(1,[Nama_Merchant] [varchar](100) NULL,[Alamat_Merchant] [varchar](255) NULL,[flag_merchant] [int] NULL,[id_merchant] [int] NULL
)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。