You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Azure Data Factory匹配删除SQL数据库中的指定记录

在Azure Data Factory中实现基于匹配行的目标表删除操作

别担心,刚接触ADF遇到这类需求完全正常,我来给你梳理几个实用的实现方向,你可以根据自己的场景选择:

方向一:Lookup活动 + 存储过程(推荐批量删除场景)

这是最常用的批量删除方案,适合数据量较大的情况:

    1. 读取CSV中的匹配键:在管道中添加Lookup活动,配置它读取你导出的CSV文件,确保正确解析分隔符和列映射,拿到所有需要匹配的主键/唯一标识列的值。
    1. 编写目标数据库的存储过程:比如针对Azure SQL/SQL Server,你可以创建一个接收表类型参数的存储过程,示例代码如下:
CREATE TYPE DeleteKeys AS TABLE (Id INT); -- 根据你的键类型调整
GO

CREATE PROCEDURE DeleteMatchingRows
    @Keys DeleteKeys READONLY
AS
BEGIN
    BEGIN TRANSACTION;
    DELETE FROM 你的目标表
    WHERE Id IN (SELECT Id FROM @Keys);
    COMMIT TRANSACTION;
END
    1. 在ADF中调用存储过程:添加Stored Procedure活动,将Lookup活动输出的键集合作为参数传入存储过程。注意在参数配置中,选择"Table type"类型,并映射Lookup返回的数据集。

方向二:数据流(Data Flow)可视化实现

如果你更倾向于无代码/低代码的可视化操作,数据流是不错的选择:

    1. 配置数据流数据源:在数据流中添加两个数据源:一个是你的CSV文件(包含要删除的键),另一个是目标数据库表。
    1. 关联匹配行:添加Join转换,将两个数据源按匹配键(比如主键)进行Inner Join,这样得到的结果集就是目标表里需要删除的记录。
    1. 设置Sink为删除模式:添加Sink转换,选择目标表,在Sink的Update Method中选择Delete,并指定用于匹配的键列。运行数据流时,就会自动删除目标表中匹配的行。
    1. 在管道中执行数据流:添加Execute Data Flow活动,关联你创建的数据流即可。

方向三:ForEach循环 + 单条删除(仅适合小数据量)

如果CSV中的记录数量很少,可以用循环逐个删除,但不推荐大数据量场景:

    1. 用Lookup读取所有行:同样用Lookup活动读取CSV的所有记录,确保勾选"First row only"为否,这样能拿到完整的行集合。
    1. 遍历每条记录执行删除:添加ForEach活动,遍历Lookup返回的结果集。在ForEach内部添加Script活动,执行单条删除语句,示例:
DELETE FROM 你的目标表 WHERE 主键列 = '@{item().主键列名}'

额外注意事项

  • 不管选择哪种方案,一定要先在测试环境验证,避免误删生产数据。
  • 批量删除时,优先选择存储过程或数据流,效率远高于循环删除。
  • 存储过程中建议添加事务控制,确保删除操作的原子性,出错时可以回滚。

内容的提问来源于stack exchange,提问作者mediamgrprog

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 16:45:29