Azure Data Factory にて Azure SQL Database のストアードプロシージャのリターン値を受け取る方法

## 概要

Azure Data Factory にて Azure SQL Database のストアードプロシージャのリターン値を受け取る方法として、スクリプトアクティビティを利用する方法を共有します。

## 検証コードと実行結果

### 1. ストアードプロシージャを Azure SQL Database に配置

`Param1`パラメータと`Param2`パラメータの文字を結合して返すストアードプロシージャを Azure SQL Database にデプロイします。

```sql
-- DROP  PROCEDURE dbo.StoredProcedure001;
CREATE PROCEDURE dbo.StoredProcedure001
    @Param1 VARCHAR(50),
    @Param2 VARCHAR(50),
	@OutputValues VARCHAR(200) OUTPUT
AS
BEGIN
    SET @OutputValues =@Param1 + @Param2;
END;
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/1af7ff6e-6d93-d783-8bc2-7f5fcd3233bc.png)

`Hello `と`World !`を渡すと、`Hello World !`を返します。

```sql
DECLARE @abc nvarchar(200)

EXEC dbo.StoredProcedure001 'Hello ','World !',@abc OUTPUT

SELECT @abc
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/4d477566-e11c-e68c-d16b-25a156190d8f.png)

### 2. Azure Data Factory にてストアードプロシージャをコールするスクリプトアクティビティのパイプラインを作成

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/faa0ca23-38b1-8e74-fa42-2017c260da81.png)

<details>
<summary>パイプライン定義</summary>

```json
{
    "name": "pipeline",
    "properties": {
        "activities": [
            {
                "name": "Script1_copy1",
                "type": "Script",
                "dependsOn": [],
                "policy": {
                    "timeout": "0.12:00:00",
                    "retry": 0,
                    "retryIntervalInSeconds": 30,
                    "secureOutput": false,
                    "secureInput": false
                },
                "userProperties": [],
                "linkedServiceName": {
                    "referenceName": "sqldb__pj1",
                    "type": "LinkedServiceReference"
                },
                "typeProperties": {
                    "scripts": [
                        {
                            "parameters": [
                                {
                                    "name": "Param1",
                                    "type": "String",
                                    "value": "a",
                                    "direction": "Input"
                                },
                                {
                                    "name": "Param2",
                                    "type": "String",
                                    "value": "b",
                                    "direction": "Input"
                                },
                                {
                                    "name": "OutputValues",
                                    "type": "String",
                                    "value": "",
                                    "direction": "Output",
                                    "size": "200"
                                }
                            ],
                            "type": "Query",
                            "text": "EXEC dbo.StoredProcedure001 'Hello ','World !',@OutputValues OUTPUT"
                        }
                    ],
                    "scriptBlockExecutionTimeout": "02:00:00"
                }
            }
        ],
        "annotations": []
    }
}
```

</details>

### 3. Azure Data Factory にてパイプラインをデバック実行して、リターン値を確認

アクティビティの出力内における`outputParameters`にてリターン値を取得していること確認。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/d4d1963b-44fa-0dc2-646c-fea29a73d7dd.png)