Sql 无法从Azure Logic Apps调用存储过程-可以';找不到参数的语法
意向声明:Sql 无法从Azure Logic Apps调用存储过程-可以';找不到参数的语法,sql,azure,azure-logic-apps,Sql,Azure,Azure Logic Apps,意向声明: 我正在尝试自动化工作流,定期将数据从Sharepoint中的CSV移动到Azure SQL数据库中的表中。我已经完成了1)格式化JSON数组,2)创建一个存储过程,成功获取JSON数组的文本,并将其导入到相应的表中 数组显示为: JSON=[{“col1”:“col1Data”,“col2”:“col2Data”,…},] SQL Management Studio中存储过程的调用如下所示: 执行SprocName@json=N' ==========================
我正在尝试自动化工作流,定期将数据从Sharepoint中的CSV移动到Azure SQL数据库中的表中。我已经完成了1)格式化JSON数组,2)创建一个存储过程,成功获取JSON数组的文本,并将其导入到相应的表中 数组显示为:
JSON=[{“col1”:“col1Data”,“col2”:“col2Data”,…},]
SQL Management Studio中存储过程的调用如下所示:
执行SprocName@json=N'
==========================================================问题:
缺少文档,无法正确格式化以下两个SQL Connector参数之一,以将这两个语句链接在一起: 和都要求提供参数或查询文本,但没有说明所述参数的格式 例如,在执行采用单个参数@json的存储过程时,以下文本“看起来”正确,但会导致错误: “body”:“@json=N'+@string(输出('Convert_Rows\u To_json')。body)+” 错误: 未能保存逻辑应用程序UpdateDomainCoverage。模板验证失败:“第“1”行和第“3148”列的模板操作“Execute_stored_procedure(V2)”无效:“模板语言表达式“json=N”+@string(outputs('Convert_Rows_To_json')。body)+”无效:位置“4”处的字符串字符“=”不应出现。”
我尝试了许多变体,无论是针对Execute存储过程上的@json参数,还是在executesql中简单地从整体构建查询,都没有效果。建议?下面是从代码视图调用存储过程的示例,该过程的参数“from”采用日期时间值。在设计器中选择存储过程时,它应显示所有要填充的参数
"Get_jobs": {
"inputs": {
"body": {
"from": "@{convertFromUtc( variables('SelectTime'), variables('timeZone'), 'yyyy-MM-dd HH:mm:ss')}"
},
"host": {
"connection": {
"name": "@parameters('$connections')['sql_2']['connectionId']"
}
},
"method": "post",
"path": "/datasets/default/procedures/@{encodeURIComponent(encodeURIComponent('[dbo].[GetJobs]'))}"
},
"runAfter": {
"Refresh_data_for_BI": [
"Succeeded"
]
},
"type": "ApiConnection"
},
好的,我今天在其他任务之间时断时续地处理这个问题,最后厌倦了在“执行查询”的输入中完成它 暴力解决方案:我添加了另一个Javascript步骤,代码如下:
var input = workflowContext.actions.Convert_Rows_To_Json.outputs.body;
var sqlQuery = 'EXECUTE [ImportDomainCoverage] N\'' + input + '\'';
return sqlQuery;
这并不漂亮(再多走一步),但它确实有效
现在看看我是否可以充分修改内容以参数化表名,而不是每个表都需要六个步骤。最终找到了语法。没有找到任何文档,只是尝试从一条错误消息转换到另一条错误消息
"Pump_data_into_target_table": {
"inputs": {
"body": {
"json": "@{body('Pull_FeedbackItems_from_source').ResultSets['Table1']}"
},
"headers": {
"Content-Type": "application/json"
},
"host": {
"connection": {
"name": "@parameters('$connections')['sql_2']['connectionId']"
}
},
"method": "post",
"path": "/v2/datasets/@{encodeURIComponent(encodeURIComponent('servername.database.windows.net'))},@{encodeURIComponent(encodeURIComponent('dbname'))}/procedures/@{encodeURIComponent(encodeURIComponent('sprocname'))}"
},
"runAfter": {
"Pull_FeedbackItems_from_Source": [
"Succeeded"
]
},
"type": "ApiConnection"
}
我的问题的基本答案是:将参数/值对作为JSON对象提供。请参见上面清单中“body”元素的值。但是,要使其工作,还必须输入“headers”元素,我甚至没有在API调用中看到记录。由一条错误消息导致,该消息指出内容类型是纯文本,而它显然是json。如果您只使用@body('Convert_Rows_to_json'),会怎么样?我通常从设计师那里挑选,所以不确定是否有正确的语法。只需从Convert_Rows_To_Json步骤中选择正文-这是一个Compose吗?Scott,它返回与输出相同的信息(“Convert_Rows_To_Json”)。Body.Scott,很遗憾,我没有“在设计器中选择存储过程”的选项。尝试下拉“存储过程名称”响应:无法检索值。无法在设计时计算参数“path.$.server”;它为空或具有运行时表达式。'