Delen via


Systeemcompatibiliteitsweergaven (Transact-SQL)

Van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)SQL Analytics-eindpunt in Microsoft FabricMagazijn in Microsoft FabricSQL-database in Microsoft Fabric

Veel van de systeemtabellen uit eerdere versies van SQL Server zijn nu geïmplementeerd als een set views. Deze weergaven staan bekend als compatibiliteitsweergaven en zijn uitsluitend bedoeld voor achterwaartse compatibiliteit. De compatibiliteitsweergaven tonen dezelfde metadata die beschikbaar was in SQL Server 2000 (8.x). De compatibiliteitsweergaven tonen echter geen metadata met betrekking tot functies die zijn geïntroduceerd in SQL Server 2005 (9.x) en later. Daarom moet je, wanneer je nieuwe functies gebruikt, zoals Service Broker of partitioneren, overstappen op catalogusweergaven.

Een andere reden om te upgraden naar catalogusweergaven is dat kolommen in compatibiliteitsweergaven die gebruikers-ID's en type-ID's opslaan, NULL kunnen teruggeven of rekenkundige overflows kunnen veroorzaken. Dit komt doordat je meer dan 32.767 gebruikers, groepen en rollen kunt aanmaken, en 32.767 datatypes. Als je bijvoorbeeld 32.768 gebruikers aanmaakt en vervolgens de volgende query uitvoert: SELECT * FROM sys.sysusers. Als ARITHABORT op AAN is gezet, faalt de query met een rekenkundige overflowfout. Als ARITHABORT op UIT staat, geeft de uid-kolom NULL terug.

Om deze problemen te voorkomen, raden we aan om de nieuwe catalogusweergaven te gebruiken die het toegenomen aantal gebruikers-ID's en type-ID's aankunnen. De volgende tabel geeft een overzicht van de kolommen die aan deze overloop onderhevig zijn.

Kolomnaam Compatibiliteitsweergave SQL Server 2005-weergave
xusertype syscolumns sys.columns
usertype syscolumns sys.columns
liduid Sysmembers sys.database_role_members
Groupuid Sysmembers sys.database_role_members
Uid Sysobjects sys.objects
Uid sysprotects sys.database_permissions

sys.server_permissions
Schenker 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

Wanneer in een gebruikersdatabase wordt verwezen, zijn systeemtabellen die in SQL Server 2000 als verouderd werden aangekondigd (zoals syslanguages of syscacheobjects), nu gebonden aan de back-compatibiliteitsweergave in het sys-schema . Aangezien de SQL Server 2000-systeemtabellen voor meerdere versies zijn verouderd, wordt deze wijziging niet als een breaking change beschouwd.

Voorbeeld: Als een gebruiker een gebruikerstabel genaamd syslanguages aanmaakt in een gebruikersdatabase, zou de instructie SELECT * from dbo.syslanguages; in die database in SQL Server 2008 de waarden uit de gebruikerstabel teruggeven. Vanaf SQL Server 2012 zal deze praktijk gegevens teruggeven uit de systeemweergave sys.syslanguages.

Zie ook

Catalogusweergaven (Transact-SQL)
Systeemtabellen toewijzen aan systeemweergaven (Transact-SQL)