首页 > 解决方案 > Azure 逻辑应用程序:如何将单个 For Each 变量传递给执行存储过程步骤?

问题描述

我正在使用 Azure Logic App 执行一个接受字符串输入的存储过程。

下面是存储过程的定义:

ALTER PROCEDURE [ResMgmt].[usp_ExtractReportBlob] 
     (@ReportFileName VARCHAR(255),
      @ReportBlobName VARCHAR(255) OUTPUT)
AS
BEGIN
    DECLARE @SQL VARCHAR(MAX), 
            @ReportSPROCName VARCHAR(MAX);

    SET @ReportSPROCName = (SELECT ReportSPROCName
                            FROM ResMgmt.ReportMetadata
                            WHERE ReportFileName = @ReportFileName);

    SET @SQL = 'EXEC ' + @ReportSPROCName + ';';

    SELECT (@SQL);

    SET @ReportBlobName = '/<azure-storage>/' + @ReportFileName;

    RETURN @ReportBlobName;
END;

存储过程最终会输出一个将由 Logic App 使用的字符串,但首先是……我无法让我的Attachments Name迭代器用作存储过程的输入。存储过程接受参数ReportFileName,该参数来自 For Each 步骤的迭代器:

对于每一步

您可以看到,在代码视图中,我在结构的键中item()动态引用:bodyjson

逻辑应用代码视图

但我最终在调试中遇到了这个错误:

错误

当我从调试运行时,我收到上面的错误。看起来json格式是正确的,所以我不明白为什么会发生错误。例如,我可以确认将正确的字符串值DTG Active Client List Daily.csv传递给存储过程 key ReportFileName

如何将此变量传递给我的存储过程?

标签: sql-serverazurestored-proceduresazure-logic-apps

解决方案


我想通了,而且非常简单。为了方便,我决定切换到Execute a SQL Querystep,但它也可以在旧方法下工作。

我将一个字符串变量传递给我的存储过程。“json看起来”是正确的,因为它包含在双引号中(例如" ")。但是存储过程需要一个包含在单引号内的字符串(例如' ')。我不得不用单引号手动包装我的变量。

像这样:

在此处输入图像描述


推荐阅读