Kompatibilitätssichten (Transact-SQL)

Viele der Systemtabellen aus früheren Versionen von SQL Server sind jetzt als eine Gruppe von Sichten implementiert worden. 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. Die Kompatibilitätssichten machen jedoch keine Metadaten bezüglich der in SQL Server 2005 und höher neu eingeführten Funktionen verfügbar. Wenn Sie also neue Funktionen, wie z. B. Service Broker oder die Partitionierung, verwenden, 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 erstellen 32.768 Benutzer erstellen und führen folgende Abfrage aus: SELECT * FROM sys.sysusers. Wenn ARITHABORT auf ON festgelegt ist, schlägt die Abfrage aufgrund eines arithmetischen Überlauffehlers fehl. Wenn ARITHABORT auf OFF gesetzt 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

Wenn in einer Benutzerdatenbank darauf verwiesen wird, sind Systemtabellen, die in SQL Server 2000 für veraltet erklärt wurden (wie syslanguages oder syscacheobjects), nun an die Abwärtskompatibilitätssicht im Schema sys gebunden. Da die Systemtabellen in SQL Server 2000 für mehrere Versionen veraltet sind, wird diese Änderung nicht als wichtige Änderung betrachtet.

Beispiel: Wenn ein Benutzer in einer Benutzerdatenbank in SQL Server 2008 eine Benutzertabelle namens syslanguages erstellt, gibt die Anweisung SELECT * from dbo.syslanguages; in dieser Datenbank die Werte der Benutzertabelle zurück. Seit SQL Server 2012 werden in diesem Verfahren Daten aus der Systemsicht sys.syslanguages zurückgegeben.

Siehe auch

Verweis

Katalogsichten (Transact-SQL)

Zuordnen von Systemtabellen zu Systemsichten (Transact-SQL)