如何解决如何同时插入和更新
我有一个包含 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);
关于如何同时插入和更新的任何建议,逐个检查数据是最后一个选项,除非可以使用合并?
编辑
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 举报,一经查实,本站将立刻删除。