Abfragen des SQL Server-Systemkatalogs

Dynamische Anwendungen, bei denen nicht im Programmcode festgelegt ist, dass sie nur einen bestimmten Satz von Tabellen und Sichten unterstützen, müssen über einen Mechanismus verfügen, um die Struktur und die Attribute der Objekte in einer Datenbank festzustellen, mit der die Anwendungen eine Verbindung herstellen. Diese Anwendungen können Informationen wie z. B. die folgenden benötigen:

  • Die Anzahl und Namen der Tabellen und Sichten in einer Datenbank.

  • Die Anzahl der Spalten in einer Tabelle oder Sicht zusammen mit Name, Datentyp, Dezimalstellen und Genauigkeit jeder Spalte.

  • Die für eine Tabelle definierten Einschränkungen.

  • Die für eine Tabelle definierten Indizes und Schlüssel.

Der Systemkatalog stellt diese Informationen für SQL Server-Datenbanken zur Verfügung. Der Kern des SQL Server-Systemkatalogs ist eine Reihe von Systemtabellen, die Metadaten enthalten, die die Objekte in einer Instanz von SQL Server beschreiben. Metadaten sind Daten, die die Attribute von Objekten in einem System beschreiben. SQL Server-Anwendungen können auf die Informationen in den Systemkatalogen auf mehrere Weisen zugreifen, nämlich mithilfe von Folgendem:

  • Katalogsichten. Diese Zugriffsmethode wird empfohlen.

  • Informationsschemasichten

  • OLE DB-Schemarowsets

  • ODBC-Katalogfunktionen

  • Gespeicherte Systemprozeduren und Systemfunktionen

Katalogsichten

Katalogsichten ermöglichen den Zugriff auf Metadaten, die in jeder Datenbank auf dem Server gespeichert sind.

HinweisHinweis

Katalogsichten bieten keinen Zugriff auf Replikation, den SQL Server-Agent oder Sicherungsmetadaten.

Es wird aus folgenden Gründen empfohlen, für den Zugriff auf Metadaten Katalogsichten zu verwenden:

  • Alle Metadaten werden in Form von Katalogsichten zur Verfügung gestellt.

  • Katalogsichten zeigen die Metadaten in einem Format, das unabhängig von der Implementierung einer Katalogtabelle ist, und sind somit nicht von Änderungen in den zugrunde liegenden Katalogtabellen betroffen.

  • Katalogsichten sind die effektivste Möglichkeit des Zugriffs auf Kernservermetadaten.

  • Katalogsichten sind die allgemeine Schnittstelle zu Katalogmetadaten und bieten die direkteste Möglichkeit, angepasste Formulare aus diesen Metadaten aufzurufen, zu transformieren und darzustellen.

  • Die Katalogsichten und ihre Spalten besitzen beschreibende Namen. Die Abfrageergebnisse stimmen mit dem überein, was Benutzer erwarten, die nur geringe Kenntnisse der Funktion besitzen, das den abgefragten Metadaten entspricht.

Die folgende Abfrage verwendet zum Beispiel die sys.objects-Katalogsicht, um alle Datenbankobjekte zurückzugeben, die in den letzten zehn Tagen geändert wurden.

SELECT name AS object_name 
  ,SCHEMA_NAME(schema_id) AS schema_name
  ,type_desc
  ,create_date
  ,modify_date
FROM sys.objects
WHERE modify_date > GETDATE() - 10
ORDER BY modify_date;

Weitere Beispiele zum Abfragen des Systemkatalogs mit Katalogsichten finden Sie unter FAQ: Abfragen des SQL Server-Systemkatalogs.

Wichtiger HinweisWichtig

In zukünftigen Versionen von SQL Server wird die Definition der Systemkatalogsichten von Microsoft möglicherweise erweitert, indem am Ende der Spaltenliste Spalten hinzugefügt werden. Von der Verwendung der Syntax SELECT * FROM sys.catalog_view_name im Produktionscode wird abgeraten, da sich die Anzahl der zurückgegebenen Spalten möglicherweise ändert und Ihre Anwendung dadurch beschädigt werden kann.

Informationsschemasichten

Informationsschemasichten basieren auf Katalogsichtdefinitionen, die im ISO-Standard festgelegt wurden. Sie stellen die Kataloginformationen in einem Format dar, das heißt unabhängig von der Implementierung einer Katalogtabelle, und sind somit nicht von Änderungen in den zugrunde liegenden Katalogtabellen betroffen. Anwendungen, die diese Sichten verwenden, können zwischen heterogenen ISO-kompatiblen Datenbanksystemen portiert werden. Weitere Informationen finden Sie unter Informationsschemasichten (Transact-SQL).

HinweisHinweis

Informationsschemasichten enthalten keine Metadaten, die für SQL Server 2008 spezifisch sind.

Im folgenden Beispiel wird die INFORMATION_SCHEMA.COLUMNS-Sicht abgefragt, um alle Spalten der Person-Tabelle in der AdventureWorks2008R2-Datenbank zurückzugeben.

SELECT TABLE_NAME, COLUMN_NAME, COLUMNPROPERTY(OBJECT_ID(TABLE_SCHEMA + '.' + TABLE_NAME), COLUMN_NAME, 'ColumnID') AS COLUMN_ID
FROM AdventureWorks2008R2.INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'Person';

Kompatibilitätssichten

Viele der Systemtabellen aus früheren Versionen von SQL Server sind jetzt als eine Gruppe von Sichten implementiert. Diese Sichten werden als Kompatibilitätssichten bezeichnet und werden lediglich aus Gründen der Abwärtskompatibilität bereitgestellt. Sie zeigen dieselben Metadaten, die auch in SQL Server 2000 verfügbar sind. Allerdings enthalten sie keine der Metadaten zu den Funktionen, die mit SQL Server 2005 und höher eingeführt wurden. Wenn Sie also neue Funktionen, wie z. B. Service Broker oder die Partitionierung, verwenden, müssen Sie Katalogsichten verwenden. Allein dies ist schon ein gutes Argument, zum Verwenden der Katalogsichten zu wechseln. Ein weiteres Argument für den Wechsel zu den Katalogsichten besteht in der Tatsache, dass es bei Spalten in Kompatibilitätssichten, in denen Benutzer-IDs und Typ-IDs gespeichert sind, zur Rückgabe von NULL-Werten oder zum Auslösen von arithmetischen Überläufen kommen kann. Dies liegt daran, dass Sie in SQL Server 2005 und höher mehr als 32.767 Benutzer, Gruppen und Rollen sowie 32.767 Datentypen erstellen können. Angenommen, Sie müssten z. B. 32.768 Benutzer erstellen und würden anschließend die folgende Abfrage ausführen: SELECT * FROM sys.sysusers. Wenn dann ARITHABORT auf ON gesetzt ist, erzeugt die Abfrage einen arithmetischen Überlauffehler. Wenn ARITHABORT auf OFF gesetzt ist, gibt die uid-Spalte NULL zurück.

Um diese Probleme zu vermeiden, wird empfohlen, die neuen Katalogsichten zu verwenden, die mit der erhöhten Anzahl von Benutzer-IDs und Typ-IDs zurechtkommen.

OLE DB-Schemarowsets

Die OLE DB-Spezifikation definiert eine IDBSchemaRowset-Schnittstelle, die eine Reihe von Schemarowsets verfügbar macht, welche die Kataloginformationen enthalten. Die OLE DB-Schemarowsets stellen eine Standardmethode zur Darstellung von Kataloginformationen dar, die von verschiedenen OLE DB-Anbietern unterstützt wird. Die Rowsets sind unabhängig von der Struktur der zugrunde liegenden Katalogtabellen. Weitere Informationen finden Sie unter Schemarowset-Unterstützung (OLE DB).

Der Microsoft SQL Server Native Client-OLE DB-Anbieter unterstützt eine Erweiterung zu IDBSchemaRowset, mit der Kataloginformationen für die in verteilten Abfragen verwendeten Verbindungsserver gemeldet werden. Weitere Informationen finden Sie unter LINKEDSERVERS-Rowset (OLE DB).

ODBC-Katalogfunktionen

Die ODBC-Spezifikation definiert eine Reihe von Katalogfunktionen, die Resultsets mit den Kataloginformationen zurückgeben. Diese Funktionen stellen eine Standardmethode zur Darstellung von Kataloginformationen dar, die von verschiedenen ODBC-Treibern unterstützt wird. Die Resultsets sind unabhängig von der Struktur der zugrunde liegenden Katalogtabellen.

Der SQL Server Native Client-ODBC-Treiber unterstützt zwei treiberspezifische Funktionen, die Kataloginformationen für die in verteilten Abfragen verwendeten Verbindungsserver melden. Weitere Informationen finden Sie unter Verwenden von Katalogfunktionen.

Gespeicherte Systemprozeduren und Systemfunktionen

Transact-SQL definiert gespeicherte Systemprozeduren und Systemfunktionen des Servers, die Kataloginformationen zurückgeben. Obwohl diese gespeicherten Prozeduren und Funktionen SQL Server-spezifisch sind, bewirken sie eine Isolierung der Benutzer von der Struktur der zugrunde liegenden Systemkatalogtabellen. Weitere Informationen finden Sie unter Metadatenfunktionen (Transact-SQL) und Gespeicherte Systemprozeduren (Transact-SQL).