Database
 sql >> Base de Dados >  >> RDS >> Database

5 maneiras de listar tabelas temporárias usando T-SQL


No SQL Server, você pode usar qualquer uma das cinco maneiras a seguir para retornar uma lista de tabelas temporárias usando o Transact-SQL.

Eles retornam tabelas temporárias locais e globais.


Opção 1 – sys.tables


O sys.tables a visualização do catálogo do sistema foi projetada especificamente para retornar informações da tabela.
SELECT name
FROM tempdb.sys.tables
WHERE name LIKE '#%';

Assim como em todas as visualizações desta página, já que queremos informações sobre temporárias tabelas, precisamos consultar essa visualização no tempdb base de dados. Podemos fazer isso alternando para esse banco de dados primeiro (para que seja nosso banco de dados atual) ou qualificando nossa consulta com o nome do banco de dados.

Neste exemplo, qualifico a consulta com o nome do banco de dados.

Opção 2 – sys.objects


Você também pode usar o sys.objects visualização do catálogo do sistema. Se você escolher essa opção, precisará filtrá-la por tipo para que apenas as tabelas do usuário sejam retornadas.
SELECT name 
FROM tempdb.sys.objects
WHERE type = 'U';

O U significa “Tabela do Usuário”. Uma maneira alternativa de fazer isso é usar WHERE type_desc = 'USER_TABLE' .

Opção 3 – INFORMAÇÕES_ESQUEMA.TABELAS


Se você quiser uma opção padrão ANSI, use o INFORMATION_SCHEMA.TABLES visualizar. Se você escolher essa opção, também precisará filtrá-la por tipo para que apenas “tabelas base” sejam retornadas.
SELECT TABLE_NAME
FROM TempDB.INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'Base Table';

Opção 4 – sp_tables


Se você estiver procurando por uma opção de procedimento armazenado, o sp_tables procedimento armazenado fará o truque.
USE tempdb;
EXEC sp_tables '#%';

Você também pode incluir explicitamente os nomes dos argumentos.
USE tempdb;
EXEC sp_tables 
  @table_name = '#%',
  @table_owner = 'dbo',
  @table_qualifier = 'tempdb',
  @table_type = "'TABLE'",
  @fUsePattern = 1;

Você notará que mudei para tempdb antes de executar este procedimento, embora eu tenha fornecido o banco de dados como um dos argumentos. Isso é realmente necessário. O @table_qualifier argumento deve corresponder ao banco de dados atual.

Observe também que o @fUsePattern pattern deve ser 1 neste caso, pois estou usando um operador curinga no nome da tabela. Configurando para 1 permite a correspondência de padrões. Configurando para 0 desabilitaria a correspondência de padrões.

Opção 5 – dbo.sysobjects


Isso provavelmente não deveria ser uma opção, mas vou listá-lo de qualquer maneira. Os dbo.sysobjects A exibição só está incluída no SQL Server para compatibilidade com versões anteriores. Ele foi marcado para descontinuação e a Microsoft desaconselha seu uso. Se você encontrá-lo em seu código, talvez considere alterá-lo para uma das opções anteriores.

De qualquer forma, veja como é:
SELECT name
FROM tempdb..sysobjects
WHERE name LIKE '#%';

Se você está se perguntando para que serve o ponto duplo (.. ), é uma maneira rápida de especificar o esquema padrão. Neste caso, o esquema padrão é dbo , então também poderíamos escrever o seguinte:
SELECT name
FROM tempdb.dbo.sysobjects
WHERE name LIKE '#%';