ich steh vor einem kleinen Problem und komm nicht weiter.
Gibt es eine einfach Möglichkeit mit sql Mitteln die Tabellen einer Sicht(View) auszugeben? Also die Tabellen auf welche die Sicht zugreift?
Ich habe es schon über die Systemsicht Information_Schema.View_Table_Usage versucht, allerdings liefert diese nur die Tabellen innerhalb der gleichen Datenbank.
Gibt es ne Möglichkeit auch die Tabellen anderer Datenbanken auf dem gleichen Server zu bekommen?
Vielen Dank
um über alle Datenbanken abzufragen, ist die Systemprozedur sp_MSForEachDB hilfreich. Folgendes Skript sollte funktionieren:
-- Temp. Tabelle zum Speichern der ermittelten Werte
CREATE TABLE #tmpViewTables
(Table\_Catalog nvarchar(255), Table\_Schema nvarchar(255), Table\_Name nvarchar(255));
-- Schleife über alle DBs
-- ? ist Platzhalter für die jeweilige DB
EXEC sp\_MSForEachDB 'USE [?];
-- Speichern der gewünschten Werte in temp. Tabelle
INSERT INTO #tmpViewTables
SELECT Table\_Catalog, Table\_Schema, Table\_Name
FROM Information\_Schema.View\_Table\_Usage
WHERE View\_Name = ''''; -- doppeltes Hochkomma beachten
';
-- Ergebnisse anzeigen
SELECT \* FROM #tmpViewTables;
-- Temp. Tabelle löschen
DROP TABLE #tmpViewTables;
Peters Vorschlag funktioniert super, allerdings bekomme ich trotzdem nur Tabellen in der Datenbank des Views. Also sobald in einem View eine Tabelle aus einer zweiten Datenbank verwendet wird, kann ich diese nicht abfragen.
Über VIEW_DEFINITION von INFORMATION_SCHEMA.Views bekomme ich den ganzen Create Befehl des Views, wo natürlich auch die übrigen Tabellen enthalten sind.
Hier könnte ich die Tabellen natürlich auch umständiglich rauslesen, aber gibt es nicht noch eine einfachere Methode?