Systemkompatibilitetsvyer (Transact-SQL)

Gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalysplattformssystem (PDW)SQL-analysslutpunkt i Microsoft FabricLager i Microsoft FabricSQL-databas i Microsoft Fabric

Många av systemtabellerna från tidigare versioner av SQL Server är nu implementerade som en uppsättning vyer. Dessa vyer kallas kompatibilitetsvyer och är avsedda endast för bakåtkompatibilitet. Kompatibilitetsvyerna exponerar samma metadata som fanns tillgänglig i SQL Server 2000 (8.x). Kompatibilitetsvyerna exponerar dock inte någon metadata relaterad till funktioner som introduceras i SQL Server 2005 (9.x) och senare. Därför måste du när du använder nya funktioner, som Service Broker eller partitionering, byta till att använda katalogvyerna.

En annan anledning till att uppgradera till katalogvyerna är att kompatibilitetsvykolumner som lagrar användar-ID och typ-ID kan returnera NULL eller utlösa aritmetiska överflöden. Detta beror på att du kan skapa mer än 32 767 användare, grupper och roller, samt 32 767 datatyper. Till exempel, om du skapar 32 768 användare och sedan kör följande fråga: SELECT * FROM sys.sysusers. Om ARITHABORT är satt till PÅ misslyckas frågan med ett aritmetiskt överflödesfel. Om ARITHABORT är satt till AV returnerar uid-kolumnen NULL.

För att undvika dessa problem rekommenderar vi att du använder de nya katalogvyerna som kan hantera det ökade antalet användar-ID och typ-ID:n. Följande tabell listar de kolumner som omfattas av detta överflöd.

Kolumnnamn Kompatibilitetsvy SQL Server 2005-vy
xusertype syskolumner sys.columns
UserType syskolumner 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
Beviljaren 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

När de refereras i en användardatabas är systemtabeller som annonserades som föråldrade i SQL Server 2000 (såsom syslanguages eller syscacheobjects) nu bundna till back-kompatibilitetsvyn i sys-schemat . Eftersom SQL Server 2000-systemtabellerna har föråldrats för flera versioner anses denna ändring inte vara en bristfällig förändring.

Exempel: Om en användare skapar en användartabell kallad syslanguages i en användardatabas i SQL Server 2008, skulle satsen SELECT * from dbo.syslanguages; i den databasen returnera värdena från användartabellen. Från och med SQL Server 2012 kommer denna metod att returnera data från systemvyn sys.syslanguages.

Se även

katalogvyer (Transact-SQL)
Mappning av systemtabeller till systemvyer (Transact-SQL)