Consultando o catálogo do sistema SQL Server

Aplicativos dinâmicos que não são codificados para trabalhar com um conjunto específico de tabelas e exibições, devem ter mecanismos para determinar a estrutura e atributos dos objetos em qualquer banco de dados aos quais são conectados. Esses aplicativos podem requerer informações como as seguintes:

  • O número e nomes das tabelas e as exibições em um banco de dados.

  • O número de colunas em uma tabela ou exibição, junto com o nome, tipo de dados, escala e precisão de cada coluna.

  • As restrições que estão definidas em uma tabela.

  • Os índices e chaves que estão definidas para uma tabela.

O catálogo de sistema fornece essas informações para os bancos de dados SQL Server. O principal do catálogo de sistema SQL Server é um conjunto exibições que mostram metadados que descrevem os objetos em uma instância do SQL Server. Metadados são dados que descrevem os atributos dos objetos em um sistema. Os aplicativos com base no SQL Server podem acessar as informações nos catálogos do sistema usando o seguinte:

  • Exibições do catálogo. Recomendamos esse método de acesso.

  • Exibições do esquema de informações.

  • Conjuntos de linhas do esquema OLE DB.

  • Catálogo de funções ODBC.

  • Procedimentos e funções armazenados no sistema.

Exibições do catálogo fornecem acesso a metadados armazenados em todos os bancos de dados no servidor.

ObservaçãoObservação

Exibições do catálogo não fornecem acesso a replicação, SQL Server Agente ou metadados posteriores.

Recomendamos usar as exibições do catálogo para acessar metadados pelas seguintes razões:

  • Todos os metadados se tornam disponíveis como exibições do catálogo.

  • Exibições do catálogo apresentam metadados em um formato que é independente de qualquer implementação de tabela de catálogo, assim sendo, as exibições do catálogo não são afetadas por mudanças nas tabelas base do catálogo.

  • Exibições do catálogo são o modo mais eficiente para acessar metadados fundamentais de servidor.

  • Exibições do catálogo são a interface geral para metadados de catálogo e fornecem a maneira mais direta de obter, transformar e apresentar formas personalizadas desses metadados.

  • Os nomes de exibições do catálogo e os nomes de suas colunas são descritivos. Resultados de consultas estão de acordo com o que poderia ser esperado, por um usuário que tenha conhecimento moderado do recurso correspondente aos metadados consultados.

Por exemplo, a consulta a seguir usa a exibição catálogo sys.objects para retornar todos os objetos do banco de dados que tenham sido modificados nos últimos 10 dias.

SELECT name AS object_name 
  ,SCHEMA_NAME(schema_id) AS schema_name
  ,type_desc
  ,create_date
  ,modify_date
FROM sys.objects
WHERE modify_date > GETDATE() - 10
ORDER BY modify_date;

Para obter mais exemplos de consultas ao catálogo de sistema usando catalog views, consulte Consultando as perguntas freqüentes do catálogo do sistema do SQL Server.

Observação importanteImportante

Em versões futuras do SQL Server, Microsoft a definição de qualquer exibição do catálogo de sistema poderá ser aumentada pela adição de colunas no final da lista de colunas. Não é recomendável o uso da sintaxe SELECT * FROM sys.catalog_view_name em código de produção, porque o número de colunas retornado pode mudar e quebrar seu aplicativo.

Exibições do esquema de informações

Exibições do esquema de informações são baseadas em definições de exibições do catálogo no padrão ISO. Eles apresentam informações do catálogo em um formato que é independente de qualquer implementação de tabela de catálogo, e assim não são afetados por mudanças nas tabelas base do catálogo. Aplicativos que usam essas exibições são portáveis entre sistemas heterogêneos de banco de dados de acordo com ISO. Para obter mais informações, consulte exibições do esquema de informações (Transact-SQL).

ObservaçãoObservação

Exibições de esquema de informações não contêm metadados específicos para SQL Server 2008.

O exemplo a seguir consulta a exibição INFORMATION_SCHEMA.COLUMNS para retornar todas as colunas para a tabela Person no banco de dados AdventureWorks2008R2.

SELECT TABLE_NAME, COLUMN_NAME, COLUMNPROPERTY(OBJECT_ID(TABLE_SCHEMA + '.' + TABLE_NAME), COLUMN_NAME, 'ColumnID') AS COLUMN_ID
FROM AdventureWorks2008R2.INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'Person';

Exibições de compatibilidade

Muitas das tabelas do sistema de versões anteriores do SQL Server são agora implementadas como um conjunto de exibições. Essas exibições são conhecidas como exibições de compatibilidade e tem como objetivo apenas à compatibilidade com versões anteriores. Eles mostram os mesmos metadados que estão disponíveis no SQL Server 2000. No entanto, não mostram os metadados relacionados aos recursos introduzidos no SQL Server 2005 e posteriores. Sendo assim, quando usar recursos novos, como o Service Broker ou particionamento, você deve alternar para as exibições do catálogo. Essa é uma boa razão para atualizar as exibições do catálogo. Outro motivo para atualizar as exibições do catálogo é que as colunas de exibição de compatibilidade que armazenam IDs de usuários e IDs de tipo podem retornar NULL ou sobrecargas aritméticas do gatilho. Isso acontece porque no SQL Server 2005 e posterior, você pode criar mais de 32.767 usuários e tipos de dados. Por exemplo, se você criar 32.768 usuários e executar a seguinte consulta: SELECT * FROM sys.sysusers; se ARITHABORT for configurado em ON, a consulta falha com um erro de sobrecarga aritmética. Se ARITHABORT for definido como OFF, a coluna uid retornará NULL.

Para evitar esses problemas, recomendamos que você atualize para utilização das novas exibições do catálogo, que podem trabalhar com o número maior de IDs de usuários e IDs de tipo.

Conjuntos de linhas do esquema OLE DB.

A especificação OLE DB define uma interface IDBSchemaRowset que expõe um conjunto de linhas de esquema contendo as informações de catálogo. Os conjuntos de linhas de esquema OLE DB são um método padrão para apresentar informações de catálogo com suporte dos fornecedores OLE DB. Os conjuntos de linhas são independentes da estrutura das tabelas de catálogo subjacentes. Para obter mais informações, consulte Suporte a conjunto de linhas de esquema (OLE DB).

O Microsoft SQL Server Native Client OLE DB Provider oferece suporte para uma extensão do IDBSchemaRowset que reporta informações de catálogo para servidores conectados, usados na distribuição de consultas. Para obter mais informações, consulte Conjunto de linhas LINKEDSERVERS (OLE DB).

Funções de catálogo ODBC.

A especificação de ODBC define um conjunto de funções de catálogo que retornam conjuntos de resultados que contêm as informações de catálogo. Essas funções são um método padrão de apresentar informações de catálogo que têm suporte por diferentes drivers de OLE DB. Os conjuntos de resultados são independentes da estrutura das tabelas base de catálogo.

O driver SQL Server Native Client ODBC oferece suporte a duas funções específicas de driver que reportam informações de catálogo para servidores conectados usados na distribuição de consultas. Para obter mais informações, consulte Usando funções de catálogo.

Procedimentos e funções armazenados no sistema.

O Transact-SQL define procedimentos armazenados do sistema de servidor e funções de sistema que retornam informações de catálogo. Embora esses procedimentos e funções armazenados sejam específicas do SQL Server, eles isolam usuários da estrutura de tabelas base de catálogo de sistema. Para obter mais informações, consulte funções de metadados (Transact-SQL) e Procedimentos armazenados do sistema (Transact-SQL).