的DMV將記錄程序統計,但他們只可能去早在上次重新啓動(通常不那麼遠,取決於計劃住在緩存多久):
SELECT * FROM sys.dm_exec_procedure_stats AS s
INNER JOIN sys.procedures AS p
ON s.[object_id] = p.[object_id]
ORDER BY p.name;
所以,如果你的系統只有很短的時間,這不是一個可靠的措施。 @Siva指出的鏈接對其他一些想法也很有用。不幸的是這樣,除非您添加跟蹤或登錄你被卡住你在DMV的信任的SQL Server並沒有真正跟蹤此爲你的整體...
編輯這是一個很好的點,我是求解有運行的程序。相反,你可能希望這樣的:
SELECT sc.name, p.name
FROM sys.procedures AS p
INNER JOIN sys.schemas AS sc
ON p.[schema_id] = sc.[schema_id]
LEFT OUTER JOIN sys.dm_exec_procedure_stats AS st
ON p.[object_id] = st.[object_id]
WHERE st.[object_id] IS NULL
ORDER BY p.name;
或者你可能還想包括已運行以及程序,而是爲了他們的時候,他們最後一次運行:
SELECT sc.name, p.name
FROM sys.procedures AS p
INNER JOIN sys.schemas AS sc
ON p.[schema_id] = sc.[schema_id]
LEFT OUTER JOIN sys.dm_exec_procedure_stats AS st
ON p.[object_id] = st.[object_id]
ORDER BY st.last_execution_time, p.name;
這將第一順序的程序,自重啓以來沒有運行過,其餘的則是當它們被執行時最後一個,最老的第一個。
對不起溼婆,那不是完全是我一直在尋找。下面Aaron的答案就是這樣做的。 –