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 '#%';