In my current environment, I have many instances of stored procedures, just like the one shown below, where a bunch of parameters are passed to the procedure, and then within the procedure a `select exists` is run and based on the result, different logic paths are run within the stored procedure.


I have a couple of questions regarding the procedure below:

1) is it a good candidate for parameter sniffing?

2) how could I add `option(recompile)` within the code?

[There are differences between adding option(recompile) within the code and creating a stored procedure with recompile.][1]

I would be more keen on the `option(recompile)` if that is possible.


    ALTER PROCEDURE	[dbo].[usp_upd_activity]
    					@activityId				INT,
    					@title					VARCHAR(100), 
    					@description			VARCHAR(MAX),
    					@inclusions				VARCHAR(MAX),
    					@locationId				INT,
    					@imageUriMain			VARCHAR(255),
    					@uploadToBucket			VARCHAR(200),
    					@path					VARCHAR(200)
    AS
    BEGIN
    
    	SET NOCOUNT ON;
    	
    	BEGIN TRAN 
    	BEGIN TRY
    
    		DECLARE @documentId INT
    		
    		IF NOT EXISTS (SELECT 1
                             FROM document 
                            WHERE activityId	= @activityId)
    		BEGIN
    			INSERT INTO	 document 
                            (	[uploadToBucket], [path], [activityId])
    			VALUES		(@uploadToBucket, @path, @activityId)
    
    			SET @documentId = SCOPE_IDENTITY();
    			
    		     
    		END
    		ELSE
    		BEGIN
    			UPDATE	document
    			SET		uploadToBucket	= @uploadToBucket,
    					[path]			= @path,
    					activityId		= @activityId
    			WHERE	activityId		= @activityId    
    
    			SET @documentId = 
                    (SELECT documentId 
                       FROM document 
                       WHERE activityId	= @activityId)
    		END
    
    		UPDATE			activity
    		SET				title			=		@title,
    						description		=		@description,
    						inclusions		=		@inclusions,
    						locationId		=		@locationId,
    						imageUriMain	=		IsNull(@imageUriMain, imageUriMain),
    						documentId		=		@documentId
    		WHERE			activityId		=		@activityId                 
    			 
    		COMMIT
    
    
    	END TRY
    	BEGIN CATCH
    		DECLARE		@ErrorMessage	nvarchar(max), 
    					@ErrorSeverity	int, 
    					@ErrorState		int;
    		SELECT		@ErrorMessage = ERROR_MESSAGE() + ' Line ' + 
    		                            cast(ERROR_LINE() as nvarchar(5)), 
    									@ErrorSeverity = ERROR_SEVERITY(), 
    									@ErrorState = ERROR_STATE();
    
    		IF @@TRANCOUNT > 0
    			ROLLBACK;
    
    		RAISERROR (@ErrorMessage, @ErrorSeverity, @ErrorState);
    	END CATCH       
           
    	
    END


  [1]: https://www.brentozar.com/archive/2013/12/recompile-hints-and-execution-plan-caching/