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

能否从SQL Server通过存储过程调用Azure Data Factory管道?

从SQL Server执行Azure Data Factory管道的实现方案

以下是两种无需依赖ADF内部存储过程或SQL数据触发器的可行方案:

方案一:通过SQL存储过程调用ADF REST API

你可以在SQL Server中创建自定义存储过程,通过调用ADF的管道运行触发API来启动管道,步骤如下:

  1. 在Azure AD中注册服务主体,获取客户端ID、客户端密钥和租户ID,并为该主体分配ADF的Data Factory Contributor权限。
  2. 在SQL Server中启用OLE自动化(需评估安全风险),或使用CLR存储过程(更安全可控)编写逻辑:
    • 先向Azure AD请求访问令牌
    • 携带令牌调用ADF的createRun API触发管道

示例OLE自动化存储过程片段:

DECLARE @tokenObj INT, @accessToken NVARCHAR(MAX), @response NVARCHAR(MAX)
-- 创建HTTP请求对象
EXEC sp_OACreate 'MSXML2.ServerXMLHTTP.6.0', @tokenObj OUT
-- 请求Azure AD令牌(替换为你的AD信息)
EXEC sp_OAMethod @tokenObj, 'Open', NULL, 'POST', 'https://login.microsoftonline.com/{租户ID}/oauth2/token', 'false'
EXEC sp_OAMethod @tokenObj, 'SetRequestHeader', NULL, 'Content-Type', 'application/x-www-form-urlencoded'
EXEC sp_OAMethod @tokenObj, 'Send', NULL, 'grant_type=client_credentials&client_id={客户端ID}&client_secret={客户端密钥}&resource=https://management.azure.com/'
EXEC sp_OAGetProperty @tokenObj, 'responseText', @accessToken OUT
EXEC sp_OADestroy @tokenObj

-- 调用ADF API启动管道
DECLARE @apiObj INT
EXEC sp_OACreate 'MSXML2.ServerXMLHTTP.6.0', @apiObj OUT
EXEC sp_OAMethod @apiObj, 'Open', NULL, 'POST', 'https://management.azure.com/subscriptions/{订阅ID}/resourceGroups/{资源组}/providers/Microsoft.DataFactory/factories/{ADF名称}/pipelines/{管道名称}/createRun?api-version=2018-06-01', 'false'
EXEC sp_OAMethod @apiObj, 'SetRequestHeader', NULL, 'Authorization', 'Bearer ' + JSON_VALUE(@accessToken, '$.access_token')
EXEC sp_OAMethod @apiObj, 'SetRequestHeader', NULL, 'Content-Type', 'application/json'
EXEC sp_OAMethod @apiObj, 'Send', NULL, ''
EXEC sp_OAGetProperty @apiObj, 'responseText', @response OUT
SELECT @response AS PipelineRunResponse
EXEC sp_OADestroy @apiObj

方案二:SQL Server代理作业调用PowerShell脚本

创建SQL Server代理作业,通过PowerShell步骤调用ADF的PowerShell cmdlet启动管道:

  1. 确保SQL Server代理服务账户有权限执行Azure PowerShell命令,或在脚本中使用服务主体认证。
  2. 编写PowerShell脚本:
# 服务主体认证
$clientId = "你的客户端ID"
$clientSecret = ConvertTo-SecureString "你的客户端密钥" -AsPlainText -Force
$credential = New-Object System.Management.Automation.PSCredential($clientId, $clientSecret)
Connect-AzAccount -ServicePrincipal -Credential $credential -Tenant "你的租户ID"

# 触发ADF管道
Invoke-AzDataFactoryV2Pipeline -ResourceGroupName "资源组名称" -DataFactoryName "ADF实例名称" -PipelineName "目标管道名称"
  1. 在SQL Server代理中新建作业,添加PowerShell类型的作业步骤,执行上述脚本即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 10:32:19