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 |
|
grantor |
sysprotects |
|
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.