variable FROM- Bedingung?

stso

Mitglied
[MSSQL] variable FROM- Bedingung?

Hallo,
ich will eine TSQL-Funktion schreiben die mir alle Datenbanken zurückliefert die seit einer bestimmten Zeit nicht mehr benutzt worden sind. In einem Cursor durchlauf ich alle Einträge der Systemsicht "sys.databases". Ein Eintrag in dieser Sicht entspricht einer Datenbank auf unserem Server. Ich habe somit die Namen alle Datenbanken.
Jetzt muss ich noch für jede Datenbank gucken wie lange sie nicht mehr benutzt wurde. Das will ich machen indem ich in jeder Datenbank die sich dort befindende Systemsicht "sys.objects" aufrufe und dort ermittle wie lange die einzelnen Systemobjekte nicht mehr benutzt worden sind. Ich berücksichtige dabei nur die Systemobjekte vom Typ
U(Usertable = normale Tabellen), V(Views = Sichten) ,P (Procedure = Prozeduren), TF (TableFunctions = Funktionen die Tabellen zurückliefern) und TR (Trigger). Ich brauche jedoch nur das "neuste Datum". Dies kann man mit folgender Anweisung realisieren:

Code:
SELECT MAX(modify_date) AS Jahr FROM [DATENBANK].sys.objects
WHERE type = 'U' OR type = 'V' OR type = 'P' OR type = 'TF' OR type = 'TR'

In der Funktion will ich nun eine DATETIME-Variable (@datum) denn Wert des oberen "SELECT"s zuweisen. Ich hab bisher folgende 3 Ansätze probiert:

Ansatz 1:
Code:
SELECT @datum = MAX(modify_date) FROM @datenbankname.sys.objects
		WHERE type = 'U' OR type = 'V' OR type = 'P' OR type = 'TF' OR type = 'TR'

@datenbankname ist die "Cursorvariable", die den jeweiligen Datenbanknamen enthält.
Dieser Ansatz funktioniert leider nicht da wohl Variablen an dieser Stelle (hinter dem FROM) nicht zugelassen sind.

Ansatz 2:
Code:
USE @datenbankname
SELECT @datum = MAX(modify_date) FROM sys.objects
		WHERE type = 'U' OR type = 'V' OR type = 'P' OR type = 'TF' OR type = 'TR'

Eine USE-Anweisung ist leider nicht innerhalb einer Funktion benutzbar. Evtl. ist auch nach einer USE-Anweisung keine Variable erlaubt.

Ansatz 3:
Code:
EXECUTE ('SELECT @datum = MAX(modify_date) FROM ' + @datenbankname + '.sys.objects WHERE type = ''U'' OR type = ''V'' OR type = ''P'' OR type = ''TF'' OR type = ''TR''')

Diese Methode wird vorgeschlagen wenn man Tabellen durchlaufen möchte, jedoch funktioniert die EXECUTE (STRING) innerhalb von Funktionen nicht.

Hat jemannd eine Idee wie ich die Funktion schreiben kann damit sie die gewünschten Ergebnisse erbringt?
 
Zuletzt bearbeitet:
Zurück