OPTION 1 – Simple Approach
SELECT plan_handle, st.text FROM sys.dm_exec_cached_plans CROSS APPLY sys.dm_exec_sql_text(plan_handle) AS st where text like '%usp_StoredProcedureName%' --from the results of the query copy and paste the value in the plan_handle column into the below query dbcc FREEPROCCACHE(0x05000A00EB673A7CC01E434B0B00000001000000000000000000000000000000000000000000000000000000)
Option 2 – The Configurable and Automated Approach
DECLARE queryText_cursor CURSOR FOR
SELECT * FROM (VALUES
('%usp_StoredProcedureName1%'),
('%usp_StoredProcedureName2%')) as X(a);
OPEN queryText_cursor
DECLARE @queryText varchar(max)
FETCH NEXT FROM queryText_cursor
INTO @queryText
WHILE @@FETCH_STATUS = 0
BEGIN
DECLARE handle_cursor CURSOR FOR
SELECT plan_handle--, text
FROM sys.dm_exec_cached_plans
CROSS APPLY sys.dm_exec_sql_text(plan_handle) AS st
WHERE text LIKE @queryText;
OPEN handle_cursor
DECLARE @Handle varbinary(max)
FETCH NEXT FROM handle_cursor
INTO @Handle
WHILE @@FETCH_STATUS = 0
BEGIN
DECLARE @query nvarchar(max)= N'DBCC FREEPROCCACHE (' + CONVERT(varchar(max),@Handle,1) + ');'
EXECUTE sp_executesql @query
FETCH NEXT FROM handle_cursor
INTO @Handle
END
CLOSE handle_cursor;
DEALLOCATE handle_cursor;
FETCH NEXT FROM queryText_cursor
INTO @queryText
END
CLOSE queryText_cursor;
DEALLOCATE queryText_cursor;