Partilhar via


Vistas de Compatibilidade do Sistema (Transact-SQL)

Aplica-se a:SQL ServerBase de Dados SQL do AzureInstância Gerida do Azure SQLAzure Synapse AnalyticsSistema de Plataforma de Análise (PDW)Ponto de Extremidade de Análise SQL no Microsoft FabricArmazém no Microsoft FabricBase de Dados SQL no Microsoft Fabric

Muitas das tabelas de sistema das versões anteriores do SQL Server são agora implementadas como um conjunto de vistas. Estas vistas são conhecidas como vistas de compatibilidade, e destinam-se apenas à compatibilidade retroativa. As vistas de compatibilidade expõem os mesmos metadados que estavam disponíveis no SQL Server 2000 (8.x). No entanto, as vistas de compatibilidade não expõem nenhum dos metadados relacionados com funcionalidades introduzidas no SQL Server 2005 (9.x) e posteriores. Por isso, quando utiliza novas funcionalidades, como Service Broker ou particionamento, deve mudar para usar as visualizações de catálogo.

Outra razão para atualizar para as visualizações de catálogo é que as colunas de visualização de compatibilidade que armazenam IDs de utilizador e IDs de tipo podem devolver NULL ou desencadear excessos aritméticos. Isto deve-se ao facto de poderes criar mais de 32.767 utilizadores, grupos e funções, e 32.767 tipos de dados. Por exemplo, se criar 32.768 utilizadores e depois executar a seguinte consulta: SELECT * FROM sys.sysusers. Se o ARITHABORT estiver definido como ON, a consulta falha devido a um erro de overflow aritmético. Se ARITHABORT estiver definido como OFF, a coluna uid devolve NULL.

Para evitar estes problemas, recomendamos que utilize as novas visualizações de catálogo que conseguem lidar com o aumento do número de IDs de utilizador e IDs de tipo. A tabela seguinte lista as colunas sujeitas a este excesso.

Nome da coluna Vista de compatibilidade Visualização do SQL Server 2005
xusertype syscolumns sys.columns
Tipo de utilizador 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
Concedente 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 sysprocessos sys.dm_exec_requests

Quando referenciadas numa base de dados de utilizador, tabelas de sistema que foram anunciadas como obsoletas no SQL Server 2000 (como syslanguages ou syscacheobjects), estão agora vinculadas à vista de retrocompatibilidade no esquema sys . Como as tabelas de sistema do SQL Server 2000 foram obsoletas para várias versões, esta alteração não é considerada uma alteração grave.

Exemplo: Se um utilizador cria uma tabela de utilizador chamada syslanguages numa base de dados de utilizador, no SQL Server 2008, a instrução SELECT * from dbo.syslanguages; nessa base de dados devolveria os valores da tabela de utilizador. A partir do SQL Server 2012, esta prática irá devolver dados da visualização do sistema sys.syslanguages.

Ver também

Visualizações do catálogo (Transact-SQL)
Mapear tabelas do sistema para vistas do sistema (Transact-SQL)