Condividi tramite


Viste di compatibilità (Transact-SQL)

Molte delle tabelle di sistema incluse nelle versioni precedenti di SQL Server sono 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, ma non espongono i metadati correlati a funzionalità introdotte in SQL Server 2005 e versioni successive. Quando si utilizzano nuove funzionalità, ad esempio Service Broker o il partizionamento, è pertanto necessario passare all'utilizzo 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

Le tabelle di sistema, quali ad esempio syslanguages o syscacheobjects, annunciate come deprecate in SQL Server 2000, vengono ora associate alla vista di compatibilità retroattiva nello schema sys quando vi viene fatto riferimento in un database utente. 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 restituisce i valori dalla tabella utente. A partire da SQL Server 2012 questa procedura restituisce i dati dalla vista di sistema sys.syslanguages.

Vedere anche

Riferimento

Viste del catalogo (Transact-SQL)

Mapping di tabelle di sistema a viste di sistema (Transact-SQL)