首页 > 解决方案 > Azure 数据工厂 V2:如何将文件名传递给存储过程变量

问题描述

我有一个重要的 Azure SQL 表,其结构如下:

Company     Revenue
-------------------
A              100
B              200
C              100
.               .
.               .
.               .

我现在正在 Azure 数据工厂 V2 上构建一个存储过程,它将每月从上面的 Azure SQL 事实表中删除一家特殊公司的所有记录。对于本练习,该特殊公司应由变量@company 标识。存储过程的结构创建为:

@company NVARCHAR(5)

DELETE FROM table 
WHERE [company] = @company

由于我将拥有来自每个公司的不同 Excel 文件,这些文件将每月将数据插入到此表中(使用复制活动),我想使用上面的存储过程删除该公司的旧数据,然后再添加最新的数据一。

然后我想将该 Excel 文件的名称(存储在 blob 容器中)传递给变量“@company”,以便存储过程知道要从事实表中删除的相关数据是什么。例如:如果 Excel 文件为“A”,则存储过程应为“delete from table where company = A”。

关于如何将 Excel 文件名传递给变量“@company”并在 Azure 数据工厂 V2 上进行设置的任何想法?

标签: sqlazureparametersazure-data-factory-2

解决方案


我使用存储过程活动,您可以从管道参数中填充参数:https ://docs.microsoft.com/en-us/azure/data-factory/transform-data-using-stored-procedure

ADF 存储过程

您可以在选择存储过程后点击“导入”自动添加参数或手动添加。然后,您可以使用管道表达式动态填充它们,例如 Jay Gong 建议使用触发器参数 @triggerBody().folderPath@triggerBody().fileName

或者,您可以将预复制脚本添加到您的复制活动中,而不是使用存储过程:

预拷贝脚本

这仅针对适当的接收器显示,例如数据库表。您也可以动态填充此脚本。在您的情况下,这可能如下所示:

@{concat('DELETE FROM table 
WHERE [company] = ''',triggerBody().fileName,'''')}

@triggerBody().fileName如果您多次使用它,将参数添加到包含文件名的管道并将其设置为或更复杂的表达式也可能是有意义的。


推荐阅读