• I modified you proc slightly to handle identifying the potential database by using plan attributes:

    SET ANSI_NULLS ON

    GO

    SET QUOTED_IDENTIFIER ON

    GO

    ALTER PROC [dbo].[dba_SearchCachedPlans]

    @StringToSearchFor VARCHAR(255)

    ,@DBNAME VARchar(255) = ''

    ,@COUNT INT = 20

    AS

    /*----------------------------------------------------------------------

    Purpose: Inspects cached plans for a given string.

    ------------------------------------------------------------------------

    Parameters: @StringToSearchFor - string to search for e.g. '%%'.

    Revision History:

    03/06/2008 Ian_Stirk@yahoo.com Initial version

    06/11/2008 GregALarsen@msn.com - modified to add DatabaseName from the DB were batch submitted

    Also added additional parameters to control what is returned

    Example Usage:

    1. exec dbo.dba_SearchCachedPlans @StringToSearchFor='%%',@DBNAME='HRMS', @COUNT=10

    2. exec dbo.dba_SearchCachedPlans '%%'

    3. exec dbo.dba_SearchCachedPlans @StringToSearchFor '%<TableScan%', @COUNT=30

    4. exec dbo.dba_SearchCachedPlans '%CREATE PROC%MessageWrite%'

    -----------------------------------------------------------------------*/

    BEGIN

    -- Do not lock anything, and do not get held up by any locks.

    SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

    SELECT TOP (@COUNT)

    st.text AS [SQL]

    , cp.cacheobjtype

    , cp.objtype

    , COALESCE(DB_NAME(st.dbid),

    DB_NAME(CAST(pa.value AS INT))+'*',

    'Resource') AS [DatabaseName]

    , cp.usecounts AS [Plan usage]

    , qp.query_plan

    FROM sys.dm_exec_cached_plans cp

    CROSS APPLY sys.dm_exec_sql_text(cp.plan_handle) st

    CROSS APPLY sys.dm_exec_query_plan(cp.plan_handle) qp

    OUTER APPLY sys.dm_exec_plan_attributes(cp.plan_handle) pa

    WHERE attribute = 'dbid' AND

    CASE when @DBNAME = '' THEN ''

    ELSE COALESCE(DB_NAME(st.dbid),

    DB_NAME(CAST(pa.value AS INT)) + '*',

    'Resource') END

    IN (RTRIM(@DBNAME),RTRIM(@DBNAME) + '*')

    AND CAST(qp.query_plan AS NVARCHAR(MAX))LIKE @StringToSearchFor

    ORDER BY cp.usecounts DESC

    END

    Gregory A. Larsen, MVP