2016-08-31 4 views
0

Ich versuche, meine Gesamtzahl der Tabellen, die Gesamtzahl der Zeilen, die letzte Aktualisierung der Datenbank und das letzte Mal, wenn eine gespeicherte Prozedur ausgeführt wurde, zu zählen. Ich habe insgesamt 4 Tabellen und 153 Zeilen nach dem manuellen Zählen. Wenn ich die sEPS.last_execution_time am Ende meiner SELECT-Anweisung hinzufüge, werden die Zahlen verworfen. Gibt es eine Möglichkeit, alles erfolgreich AGGR zu machen, dann das letzte Ausführungsdatum zurückzuziehen?AGGREGATE Function Group 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 

Wenn ich den obigen Code ausführen, ich bin 5 Reihen immer wieder (sollte es nur eine sein) und ich bin eine Tabelle 3 mal bekommen. Jede Hilfe wird geschätzt. DANK

Antwort

1

Das letzte Mal, dass ein sp ausgeführt wurde, kann nicht mit den restlichen Tabellen verbunden werden, weil die anderen durch die object_id der Tabelle verbunden sind. Sie könnten so etwas tun:

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

Hohe TEN! Danke, Lamak – Clint