Search code examples
sql-serverstored-procedures

Last Run Date on a Stored Procedure in SQL Server


We starting to get a lot of stored procedures in our application. Many of them are for custom reports many of which are no longer used. Does anyone know of a query we could run on the system views in SQL Server 2005 that would tell us the last date a stored procedure was executed?


Solution

  • In a nutshell, no.

    However, there are "nice" things you can do.

    1. Run a profiler trace with, say, the stored proc name
    2. Add a line each proc (create a tabel of course)
      • "INSERT dbo.SPCall (What, When) VALUES (OBJECT_NAME(@@PROCID), GETDATE()"
    3. Extend 2 with duration too

    There are "fun" things you can do:

    1. Remove it, see who calls
    2. Remove rights, see who calls
    3. Add RAISERROR ('Warning: pwn3d: call admin', 16, 1), see who calls
    4. Add WAITFOR DELAY '00:01:00', see who calls

    You get the idea. The tried-and-tested "see who calls" method of IT support.

    If the reports are Reporting Services, then you can mine the RS database for the report runs if you can match code to report DataSet.

    You couldn't rely on DMVs anyway because they are reset om SQL Server restart. Query cache/locks are transient and don't persist for any length of time.