无法从 Azure 逻辑应用程序调用 SPROC - 找不到参数的语法

Inability to call SPROC from Azure Logic Apps - can't find syntax for the parameters

意向书:
我正在尝试自动化工作流程,定期将数据从 Sharepoint 中的 CSV 移动到 Azure SQL 数据库中的 table。到目前为止,我已经做到了 1) 格式化 JSON 数组,以及 2) 创建一个成功获取 JSON 数组文本的 SPROC,并将其导入适当的 table。

数组显示为: JSON = [{"col1":"col1Data","col2":"col2Data", ...}, <600-some more iterations>]

在 SQL Management Studio 中调用存储过程如下所示: EXECUTE SprocName @json=N'<text of JSON above>'

===========================================
问题:
缺少文档使我能够将以下两个 SQL 连接器参数之一正确格式化为 link 这两个语句:

两者 Execute a Query (v2) and Execute a Stored Procedure (v2) 都要求提供参数或查询文本,但没有说明应如何格式化所述参数。

例如,在执行带单个参数@json的存储过程方面,以下文本"looks"正确,但导致错误:

"body": "@json=N'+@string(outputs('Convert_Rows_To_Json').body)+'"

错误: 无法保存逻辑应用 UpdateDomainCoverage。模板验证失败:“第 1 行和第 3148 列的模板操作 'Execute_stored_procedure_(V2)' 无效:"The template language expression 'json=N'+@string(outputs('Convert_Rows_To_Json').body)+'' is not valid: the string character '=' at position '4' is not expected.".'.

我已经尝试了多种变体,对于执行存储过程中的@json 参数,或者只是在执行SQL 中从整个布料构建查询,都无济于事。建议?

以下是代码视图中的示例,该示例使用采用日期时间值的参数 '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"
    },

好吧,今天我一直在处理其他任务之间的断断续续,最后厌倦了尝试在 "Execute query".[=11= 的输入中完成它]

蛮力解决方案:我添加了另一个Javascript步骤,代码如下:

var input = workflowContext.actions.Convert_Rows_To_Json.outputs.body;

var sqlQuery = 'EXECUTE [ImportDomainCoverage] N\'' + input + '\'';

return sqlQuery;

它不是很漂亮(多了一步),但它确实有效。

现在看看我是否可以充分修改以参数化 table 名称,而不是每个 table.

都需要六个步骤

终于弄明白语法了。未找到任何文档,只是尝试从一条错误消息到另一条错误消息。

"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"
            }

我的问题的基本答案是:提供 parameter/value 对作为 JSON 对象。查看上面清单中 "body" 元素的值。不过,要使其生效,还必须输入 "headers" 元素,我什至没有在 API 调用中看到它的记录。由一条错误消息导致,指出内容类型是纯文本,而它显然是 json.