2016-09-05 6 views
-1

Wenn ich eine Abfrage ausführen, bekomme ich 3 Zeilen zurück und die Zeilen und Tabellen sind nicht gleich, was ich habe. Ich habe sie gezählt und insgesamt 222 Zeilen. Wenn ich den Code ausführe, bekomme ich nur 63 und bekomme 3 weitere Zeilen zurück. Ich soll nur 1 Reihe haben. Scheint so zu sein, wenn ich das Maximum reinlege, wirft es alles weg. Ich soll alle Tabellen zusammenfassen, die Gesamtzahl der Zeilen abrufen, das letzte Mal, dass die Datenbank aktualisiert wurde, und das letzte Mal, dass ein gespeicherter Prozess ausgeführt wurde. I kann nicht Verwenden Sie eine CROSS JOIN, wie ich weiß, dass es damit arbeiten wird. Irgendwelche anderen Ideen? Sehr geschätzt!AGGREGATE Funktion gespeicherte Prozedur

SELECT 
    COUNT(SCHEMA_NAME()) AS TableCount, 
    SUM(SysPartn.Rows) AS 'Total rows in DB', 
    MAX(SysObj.modify_date) AS 'Last time updated', 
    (SysExProcStats.last_execution_time) AS 'Last time Executed' 
FROM sys.objects AS SysObj 
INNER JOIN sys.partitions AS SysPartn ON SysObj.object_id = SysPartn.object_id 
INNER JOIN sys.dm_exec_procedure_stats AS SysExProcStats ON SysObj.object_id = SysExProcStats.object_id 
WHERE SysObj.type = 'U' 
GROUP BY SysExProcStats.last_execution_time 
+1

Uh .... Wenn Sie irgendwelche Ergebnisse dieser Abfrage sind immer, dann ist es, weil die object_id Ihrer Tabellen die object_id eines Verfahrens entspricht in einer anderen Datenbank auf demselben Server. BEARBEITEN: Um klar zu sein, während sys.objects Ihre Datenbank betrachtet, sucht sys.dm_exec_procedure_stats alle Ihre Datenbanken (siehe: die Spalte database_id in Ihrer sys.dm_exec_procedure_stats). sys.dm_exec_procedure_stats ist, wie der Name schon sagt, für Prozeduren, nicht für Tabellen. Wenn Sie nach Tabellen suchen (Typ 'U'), sollten Sie nicht wirklich sys.dm_exec_procedure_stats auf object_id beitreten. – ZLK

+0

EDIT: Vielleicht möchten Sie etwas wie 'count (*), sum (sypartn.rows), max (sysobj.modify_date), max (Z.lastProcTime) aus sys.objects sysobj join sys.partitions sypartn auf sysobj.object_id = syspartn.object_id cross apply (auswählen max (last_execution_time) von sys.dm_exec_procedure_stats wo database_id = db_id()) Z (lastProcTime) ' – ZLK

Antwort

0

Sie können LEFT JOIN:

SELECT 
    COUNT(SCHEMA_NAME()) AS TableCount, 
    SUM(SysPartn.Rows) AS 'Total rows in DB', 
    MAX(SysObj.modify_date) AS 'Last time updated', 
    (SysExProcStats.last_execution_time) AS 'Last time Executed' 
FROM sys.objects AS SysObj 
LEFT JOIN sys.partitions AS SysPartn ON SysObj.object_id = SysPartn.object_id 
LEFT JOIN sys.dm_exec_procedure_stats AS SysExProcStats ON SysObj.object_id = SysExProcStats.object_id 
WHERE SysObj.type = 'U' 
GROUP BY SysExProcStats.last_execution_time