Sometimes you have to execute a Query dynamically using Exec(@Sql). This method works fine as long as you don't want any output values from the @Sql query. But there's another method (sp_Executesql) that allows you to execute queries dynamically as well as get their output values. The syntax :- EXECUTE sp_executesql @SQLString, @ParmDefinition, @parm=@parmIN, @parm1OUT=@parmRET1 OUTPUT,@parm2OUT=@parmRET2 OUTPUT Example :- DECLARE @IntVariable INT DECLARE @SQLString nVARCHAR(500) DECLARE @ParmDefinition nVARCHAR(500) DECLARE @Lastlname nVARCHAR(30) SET @SQLString = 'SELECT @LastlnameOUT = max(lname) FROM pubs.dbo.employee WHERE job_lvl = @level' SET @ParmDefinition = '@level tinyint, @LastlnameOUT varchar(30) OUTPUT' SET @IntVariable = 35 EXECUTE sp_executesql @SQLString, @ParmDefinition, @level = @IntVariable, @LastlnameOUT=@Lastlname OUTPUT SELECT @Lastlname Note: sp_Executesql is a Extended Stored Procedure.