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)