Systemkompatibilitätssichten (Transact-SQL)

Gilt für:SQL ServerAzure SQL-DatenbankAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)SQL-Endpunkt in Microsoft FabricWarehouse in Microsoft Fabric

Viele der Systemtabellen aus früheren Versionen von SQL Server sind jetzt als Gruppe von Sichten implementiert. Diese Sichten werden als Kompatibilitätssichten bezeichnet und sollen ausschließlich für die Abwärtskompatibilität verwendet werden. Die Kompatibilitätssichten machen die gleichen Metadaten verfügbar wie in SQL Server 2000 (8.x). Die Kompatibilitätssichten machen jedoch keine Metadaten zu den in SQL Server 2005 (9.x) und höher neu eingeführten Features verfügbar. Wenn Sie also neue Features verwenden, wie z. B. Service Broker oder die Partitionierung, müssen Sie Katalogsichten verwenden.

Ein weiterer Grund für ein Upgrade auf die Katalogsichten besteht darin, dass Kompatibilitätssichtspalten, in denen Benutzer-IDs und Typ-IDs gespeichert werden, evtl. NULL zurückgeben oder arithmetische Überläufe auslösen. Dies liegt daran, dass Sie mehr als 32.767 Benutzer, Gruppen und Rollen sowie 32.767 Datentypen erstellen können. Angenommen, Sie würden 32.768 Benutzer erstellen und folgende Abfrage ausführen: SELECT * FROM sys.sysusers. Wenn ARITHABORT auf ON festgelegt ist, schlägt die Abfrage aufgrund eines arithmetischen Überlauffehlers fehl. Wenn ARITHABORT auf OFF festgelegt ist, gibt die uid-Spalte NULL zurück.

Zur Vermeidung dieser Probleme wird die Verwendung der neuen Katalogsichten empfohlen, die die erhöhte Anzahl von Benutzer-IDs und Typ-IDs verarbeiten können. In der folgenden Tabelle sind die Spalten aufgeführt, bei denen es zu einem solchen Überlauf kommen kann.

Spaltenname Kompatibilitätssicht SQL Server 2005-Sicht
xusertype syscolumns sys.columns
usertype syscolumns sys.columns
memberuid sysmembers sys.database_role_members
groupuid sysmembers sys.database_role_members
uid sysobjects sys.objects
uid sysprotects sys.database_permissions

sys.server_permissions
grantor sysprotects sys.database_permissions

sys.server_permissions
xusertype systypes sys.types
uid systypes sys.types
uid sysusers sys.database_principals
altuid sysusers sys.database_principals
gid sysusers sys.database_principals
uid syscacheobjects sys.dm_exec_plan_attributes
uid sysprocesses sys.dm_exec_requests

Bei Referenzierung in einer Benutzerdatenbank sind Systemtabellen, die in SQL Server 2000 als veraltet markiert wurden (z. B. syslanguages oder syscacheobjects), jetzt an die Abwärtskompatibilitätssicht im sys-Schema gebunden. Da die SQL Server 2000-Systemtabellen für mehrere Versionen als veraltetet markiert wurden, wird diese Änderung nicht als wichtige Änderung eingestuft.

Beispiel: Wenn eine Benutzertabelle namens syslanguages in einer Benutzerdatenbank erstellt wird, gibt die Anweisung SELECT * from dbo.syslanguages; in dieser Datenbank in SQL Server 2008 die Werte aus der Benutzertabelle zurück. Ab SQL Server 2012 gibt dieser Vorgang Daten aus der Systemsicht sys.syslanguages zurück.

Weitere Informationen

Katalogsichten (Transact-SQL)
Zuordnen von Systemtabellen zu Systemsichten (Transact-SQL)