DECLARE @SQLQuery VARCHAR(4000)
SET @SQLQuery = 'SELECT @Query_Result_Count = Count(Column_1) FROM table_A'
DECLARE @Outer_Variable AS INT
@query = @SQLQuery,
@params = N'@Query_Result_Count INT OUTPUT',
@Query_Result_Count = @Outer_Variable OUTPUT
If you can see, we have used “@Query_Result_Count” variable into @SQLQuery which is not declared anywhere before into the declared variable script. This is because we are passing this variable as a parameter into SP_ExecuteSQL statement the same way we are executing the stored procedure. You can check this with “@params = N’@Query_Result_Count INT OUTPUT’,” line of statement.
You can get the output of any dynamic SQL into your local SQL variable by declaring that variable first like we did “DECLARE @Outer_Variable AS INT” and then get this variable filled with the values return by executing the SP_ExecuteSQL statement this way “@Query_Result_Count = @Outer_Variable OUTPUT”. Here “@Query_Result_Count” is the variable that we are passing and using into dynamic SQL.
You can also pass multiple parameters to Sp_ExecuteSQL this way,
@params = N'@Para1 INT, @Para2 Varchar(200), @Query_Result_Count INT OUTPUT '
Also you Need to provide values for input parameters like @Para1, and @Para2 by declaring an outer variable or any static values this way:
DECLARE @Outer_Para1 INT
SET @Outer_Para1 = 10
DECLARE @Outer_Para2 VARCHAR(200)
SET @Outer_Para2 = 'Test'
@query = 'SELECT @Query_Result_Count = Count(Column_1) FROM table_A WHERE Column_2 = @Para1 AND Column_3 = @Para2 ',
@params = N'@Para1 INT, @Para2 Varchar(200), @Query_Result_Count INT OUTPUT',
@Para1 = @Outer_Para1 , @Para2 = @Outer_Para2, @Query_Result_Count = @Outer_Variable OUTPUT