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 |
|
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 |
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)