Azure Data Factory にてストアードプロシージャアクティビティのパラメータを動的に設定する方法

## 概要

Azure Data Factory にてストアードプロシージャアクティビティのパラメータを動的に設定する方法を共有します。次のようなオブジェクト型の値をストアド プロシージャのパラメーターに渡すことで、パラメータの数と値を動的に設定できるようです。本記事では検証コードと結果を共有します。

```text
{"Param1":{"value": "a","type": "String"},"Param2": {"value": "b","type": "String"},"Param3": {"value": "c","type": "String"}}
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/c055881d-3cb8-f145-d393-04fcf84c1eec.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/63218a34-f526-730b-9e9a-1531b9e716de.png)


## 検証コードと結果

### 1. Azure SQL Database にてストアードプロシージャとテーブルを作成

```sql
-- DROP TABLE dbo.tbl010
CREATE TABLE dbo.tbl010
(
	ID int IDENTITY (1,1) NOT NULL
	,str_col nvarchar(100)
	,PRIMARY KEY (ID)
);

-- DROP PROCEDURE dbo.StoredProcedure010;
CREATE PROCEDURE dbo.StoredProcedure010
    @Param1 VARCHAR(50),
    @Param2 VARCHAR(50)
AS
BEGIN
    INSERT INTO dbo.tbl010 (str_col)
	SELECT @Param1 + @Param2;
END;
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/858c1258-06eb-8ec6-4414-5f3e59a687f2.png)


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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/35f26042-500d-7050-17fd-75138db833ad.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/db296d71-2461-3fbf-d8e7-6ea573461e68.png)

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

```json
{
    "name": "pipeline",
    "properties": {
        "activities": [
            {
                "name": "Stored ",
                "type": "SqlServerStoredProcedure",
                "dependsOn": [],
                "policy": {
                    "timeout": "0.12:00:00",
                    "retry": 0,
                    "retryIntervalInSeconds": 30,
                    "secureOutput": false,
                    "secureInput": false
                },
                "userProperties": [],
                "typeProperties": {
                    "storedProcedureName": {
                        "value": "@pipeline().parameters.sp_name",
                        "type": "Expression"procedure1
                    },
                    "storedProcedureParameters": {
                        "value": "@pipeline().parameters.sp_paras",
                        "type": "Expression"
                    }
                },
                "linkedServiceName": {
                    "referenceName": "sqldb__pj1",
                    "type": "LinkedServiceReference"
                }
            }
        ],
        "parameters": {
            "sp_name": {
                "type": "string",
                "defaultValue": "dbo.StoredProcedure010"
            },
            "sp_paras": {
                "type": "object",
                "defaultValue": {
                    "Param1": {
                        "value": "a",
                        "type": "String"
                    },
                    "Param2": {
                        "value": "b",
                        "type": "String"
                    }
                }
            }
        },
        "annotations": []
    }
}
```

</details>

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/17d48ffa-16f1-e357-0be5-c77deca7eeae.png)


```sql
SELECT * FROM dbo.tbl010;
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/a2afc20d-fbac-c15d-301e-a76f0e41a322.png)