Beim Analysieren von Datenbanken, deren Struktur man nicht kennt stellt sich oft die Frage: Welche Views referenzieren auf welche Tabellen?“ bzw. „Welche Tabellen werden von Views referenziert?“. Um diese Frage bei einer Microsoft SQL Server-Datenbank zu beantworten kann man, außer den entsprechenden Views im sys–Schema, auch die View VIEW_TABLE_USAGE aus dem INFORMATION_SCHEMA–Schema verwenden. Diese ist genau dazu gedacht die Frage nach den Abhängigkeiten zwischen Views und Tabellen zu beantworten und deshalb sehr einfach zu verwenden.
Mit dem folgende einfachen SQL-Statement erhält man die Information zu den Abhängigkeiten zwischen Tabellen und Views:
SELECT vtu.VIEW_SCHEMA, vtu.VIEW_NAME, vtu.TABLE_SCHEMA, vtu.TABLE_NAME FROM INFORMATION_SCHEMA.VIEW_TABLE_USAGE AS vtu
Wenn das gleiche Ergebnis mit den Views aus dem sys–Schema erzeugt werden soll, ist hingegen das deutlich umfangreichere folgende SQL notwendig:
SELECT DISTINCT viewSchema.name AS VIEW_SCHEMA, v.name AS VIEW_NAME, refSchema.name AS TABLE_SCHEMA, refObj.name AS TABLE_NAME FROM sys.sql_dependencies AS sd INNER JOIN sys.views AS v ON v.object_id = sd.object_id LEFT OUTER JOIN sys.schemas AS viewSchema ON v.schema_id = viewSchema.schema_id LEFT OUTER JOIN sys.objects AS refObj ON sd.referenced_major_id = refObj.object_id LEFT OUTER JOIN sys.schemas AS refSchema ON refObj.schema_id = refSchema.schema_id WHERE sd.class IN (0,1)
Neben der einfachen Anwendung hat das INFORMATION_SCHEMA auch den Vorteil, dass es im SQL-92 Standard definiert ist. Dadurch ermöglicht es eine gewisse Portabilität. So wird das INFORMATION_SCHEMA–Schema neben Microsoft SQL Server auch von MySQL und PostgreSQL unterstütz.
Der Nachteil des INFORMATION_SCHEMA–Schema ist, dass es nicht alle Informationen die im sys–Schema in SQL Server vorhanden sind enthält.
Wenn es aber darum geht einfach und schnell die Frage welche Views auf welche Tabellen zugreifen zu beantworten ist die View INFORMATION_SCHEMA.VIEW_TABLE_USAGE meiner Meinung nach die einfachste Möglichkeit.