Freigeben über


Systemkompatibilitätsansichten (Transact-SQL)

Gilt für: SQL Server Azure SQL-Datenbank Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW) SQL Analytics-Endpunkt in Microsoft Fabric Warehouse in Microsoft Fabric

Viele der Systemtabellen aus früheren Versionen von SQL Server werden jetzt als Eine Reihe von Ansichten implementiert. Diese Sichten werden als Kompatibilitätssichten bezeichnet und sollen ausschließlich für die Abwärtskompatibilität verwendet werden. Die Kompatibilitätsansichten machen dieselben Metadaten verfügbar, die in SQL Server 2000 (8.x) verfügbar waren. Die Kompatibilitätsansichten machen jedoch keine metadaten im Zusammenhang mit Features verfügbar, die in SQL Server 2005 (9.x) und höher eingeführt werden. Wenn Sie daher neue Features wie Service Broker oder Partitionierung verwenden, müssen Sie zu der Verwendung der Katalogansichten wechseln.

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
Geber 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

Wenn auf eine Benutzerdatenbank verwiesen wird, sind Systemtabellen, die in SQL Server 2000 als veraltet bekannt gegeben wurden (z . B. syslanguages oder syscacheobjects), jetzt an die Back-Compatibility-Ansicht 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 ein Benutzer eine Benutzertabelle namens "syslanguages " in einer Benutzerdatenbank in SQL Server 2008 erstellt, würde die Anweisung SELECT * from dbo.syslanguages; in dieser Datenbank die Werte aus der Benutzertabelle zurückgeben. Ab SQL Server 2012 gibt diese Übung Daten aus der Systemansicht sys.syslanguages zurück.

Weitere Informationen

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