2016-08-31 5 views
0

テーブルの総数、行の総数、DBが最後に更新された時刻、およびストアドプロシージャが最後に実行された時刻をカウントしようとしています。私は手動で数えた後、合計4つのテーブルと153の行を持っています。 SELECTの最後にsEPS.last_execution_timeを追加すると、数値がスローされます。私は正常にすべてをAGGRできる方法はありますか?そして最後の実行日を取り戻しますか?私は上記のコードを実行するとAGGREGATE関数グループBy

SELECT 
    COUNT(SCHEMA_NAME(sO.schema_id)) AS TableCount, 
    SUM(sPTN.Rows) AS [RowCount], 
    MAX(sO.modify_date) AS LastUpdated, 
    (sEPS.last_execution_time) AS 'LastExecuted' 
FROM sys.objects AS sO 
INNER JOIN sys.partitions AS sPTN ON sO.object_id = sPTN.object_id 
INNER JOIN sys.dm_exec_procedure_stats AS sEPS ON sO.object_id = sEPS.object_id 
WHERE sO.type = 'U' 
GROUP BY sEPS.last_execution_time 

、私は戻って5行を取得しています(一つだけがあるはずです)と私は1つのテーブル3回を取得しています。どんな助けもありがとうございます。 THANKS

答えて

1

spが最後に実行された時間は、残りのテーブルがテーブルのobject_idで結合されているため、残りのテーブルに結合できません。あなたは次のようなことをすることができます:

SELECT COUNT(DISTINCT SO.object_id) AS TableCount, 
     SUM(sPTN.Rows) AS [RowCount], 
     MAX(sO.modify_date) AS LastUpdated, 
     MAX(LastExecuted) LastExecuted 
FROM sys.objects AS sO 
INNER JOIN sys.partitions AS sPTN 
    ON sO.object_id = sPTN.object_id 
CROSS JOIN (SELECT MAX(last_execution_time) LastExecuted 
      FROM sys.dm_exec_procedure_stats) AS sEPS 
WHERE sO.type = 'U'; 
+0

高いTEN!ラマクありがとう – Clint