Systemkompatibilitätssichten (Transact-SQL)
Gilt für:SQL Server
Azure SQL-Datenbank
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
SQL-Endpunkt in Microsoft Fabric
Warehouse 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)