Viste di compatibilità del sistema (Transact-SQL)

Si applica a: SQL Server database SQL di Azure Istanza gestita di SQL di Azure endpoint di analisi SQL di Azure Synapse Analytics Platform System (PDW) in Microsoft Fabric Warehouse in Microsoft Fabric

Molte delle tabelle di sistema delle versioni precedenti di SQL Server vengono ora implementate come set di viste. Queste viste sono note come viste di compatibilità e sono disponibili solo per compatibilità con le versioni precedenti. Le viste di compatibilità espongono gli stessi metadati disponibili in SQL Server 2000 (8.x). Tuttavia, le viste di compatibilità non espongono i metadati correlati alle funzionalità introdotte in SQL Server 2005 (9.x) e versioni successive. Pertanto, quando si usano nuove funzionalità, ad esempio Service Broker o partizionamento, è necessario passare all'uso delle viste del catalogo.

Un altro motivo per eseguire l'aggiornamento alle viste del catalogo è rappresentato dal fatto che le colonne delle viste di compatibilità in cui sono archiviati ID utente e ID di tipo possono restituire NULL o attivare overflow aritmetici, dal momento che è possibile creare oltre 32.767 utenti, gruppi e ruoli e 32.767 tipi di dati. Se ad esempio è necessario creare 32.768 utenti e quindi eseguire la query SELECT * FROM sys.sysusers, in caso di impostazione di ARITHABORT su ON la query ha esito negativo e viene generato un errore di overflow aritmetico. Se ARITHABORT è impostato su OFF, la colonna uid restituisce NULL.

Per evitare questi problemi, è consigliabile usare le nuove viste del catalogo in grado di gestire un numero più elevato di ID utente e ID di tipo. Nella tabella seguente sono elencate le colonne soggette a questo tipo di overflow.

Nome colonna Vista di compatibilità Vista di SQL Server 2005
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

Quando si fa riferimento a un database utente, le tabelle di sistema annunciate come deprecate in SQL Server 2000 (ad esempio syslanguages o syscacheobjects), vengono ora associate alla vista di compatibilità di back-compatibility nello schema sys . Poiché le tabelle di sistema di SQL Server 2000 sono state deprecate per più versioni, tale modifica non viene considerata una modifica di rilievo.

Esempio: se un utente crea una tabella utente denominata syslanguages in un database utente, in SQL Server 2008, l'istruzione SELECT * from dbo.syslanguages; in tale database restituirà i valori della tabella utente. A partire da SQL Server 2012, questa procedura restituirà i dati dalla vista di sistema sys.syslanguages.

Vedi anche

Viste del catalogo (Transact-SQL)
Mapping delle tabelle di sistema alle viste di sistema (Transact-SQL)