【发布时间】:2021-08-10 03:08:46
【问题描述】:
我有 2 个表,我的目标是当我上传文件时(文件包含多个数据)我已经在表历史记录中插入文件数据,第一步是我想将历史记录表与名为 EDC 表的表进行比较,如果上传的文件包含 EDC 中存在的数据,然后更新历史记录表(历史记录表包含列 isExist)如果匹配我想更新历史记录,如果不匹配我想将列 isExist 更新为 0
MERGE EDC AS trgt
USING (SELECT kcndh.Nomor_Kartu_Kredit,kcndh.Nama_CardHolder, kcndh.IsExistEDW FROM History kcndh WHERE kcndh.nama_file = '1233.csv')S
ON trgt.Nomor_Kartu_Kredit = Nomor_Kartu_Kredit AND trgt.Nama_Pemegang_Kartu = Nama_CardHolder
WHEN MATCHED THEN
UPDATE SET
S.IsExistEDW = 1
WHEN NOT MATCHED THEN
UPDATE set
S.IsExistEDW = 0;
我有错误
在 MERGE 语句的“WHEN NOT MATCHED”子句中不允许使用“UPDATE”类型的操作。
有什么方法可以在不使用合并的情况下进行比较和更新,或者如何在不将历史表中的上传值与 EDC 表一一比较的情况下实现我的目标?
【问题讨论】:
-
“NOT MATCHED”的定义意味着没有找到匹配的行......所以没有要更新的行。您需要显示一些示例数据和所需结果以进一步阐明您的需求,因为我不清楚。
-
如果行不匹配我想更新源表,可以使用合并吗?
-
不能用合并更新源表,只能更新目标表。
-
您的源表和目标表是否被颠倒了?
标签: sql sql-server tsql sql-merge