To facilitate native SQL activities you got store procedure support in Azure data factory (ADF) which is really helpful. When we work with store procedure, mostly we use input parameters, However; it also have output parameters, where a store procedure will return value like function. This article will describe how you can work store procedure with output parameters in ADF.
ADF have activity called 'store procedure' which is used for any store procedure you have written in SQL database. ADF also have lookup activity where you can use store procedure. The example we will go through will use Lookup activity to connect store procedure from a database.
Let's make a small Store Procedure (SP) with Output parameter:
CREATE procedure [ETL].[sp_testprocOutParm]
(@Iambit bit OUTPUT)
AS
BEGIN
SELECT 1 Iambit
END
Let's see if the SP return expected value. But how do we execute the SP in SQL Server Management Studio (SSMS)? Please write below syntax you will find the outcome.
DECLARE @Iambit bit
EXEC ETL.sp_testprocOutParm @Iambit OUTPUT;
You should have outcome like below fig 1.0
Fig 1.0: Execution of output parameter in SSMS
So far so good, SP is created in the database and it's returned expected outcome. Now we need to move to ADF and connect this SP. Assuming you know how to create pipeline in ADF. In your pipeline get the Lookup activity as like figure 1.1.
Now, Go Settings of the Lookup activity and choose Store Procedure from Use query (as shown in figure 1.1)
Then you should able to see the store procedure under the dropdown list which you just created in the database. If you are not able to see the store procedure then it most likely with your access in ADF. Please remember, though you can execute the SP in SSMS doesn't mean you will have access the store procedure from ADF, talk with your portal Admin and find out if your user group have given enough permission to connect store procedure.

Fig 1.1: Connect store procedure via Lookup in ADF
If you find out the store procedure in the list you are good to go for the next step. Next step is to import parameter by clicking the button import parameter (as like figure 1.2)
Fig 1.2: import parameter
The import parameter will bring you all the parameters you have irrespective of input or output parameters, in this case output parameter will be shown.
How do we use this output parameter?
Since you have output parameter means you want to return some value from database and use in ADF. In this example return value will control the next activities in the pipeline. Let's store the return value into a variable.
So please drag and drop Set variable activity and connect with the Lookup as like below figure 1.3
Fig 1.3: Add Set variable
We need to create a variable as like below figure 1.4, please note that this variable is at pipeline scope. So make sure you do not click any activities rather the pipeline is selected.
Fig 1.4: Creating variable
While creating variable you will find there are three type of variables such as string, Boolean and Array. We have chosen Boolean type for the variable.
Fig 1.5: Creating variable
Now, let's get to the pipeline and select set variable (as shown in figure 1.6). In the Set variable activity, please click variable tab then you will find recently created variable under the name, select it like the figure 1.6 is shown.
Fig 1.6: Choose the variable
To bind the value from returned store procedure to variable, you need write the expression under the 'value' of the variable as shown in figure 1.7
Fig 1.7: expression to hold return value
The expression to bind return value from Store procedure:
@activity('Lookup1').output.firstRow.Iambit
Let's explain what expression means:
We are selecting first row returned by the lookup and selecting the column which is returned by the store procedure, here column selected in the store procedure is Iambit.
Be Cautious:
Though variable as Boolean and store procedure returned the value as a bit, but I found error in the ADF. So I had to modify the expression where it explicitly convert return value to Boolean, like below which worked like a gem.
@bool(activity('Lookup1').output.firstRow.Iambit)
In summary, output parameter in store procedure a great facility when in need and happy to see that works in ADF.
No comments:
Post a Comment