Skip to content

Instantly share code, notes, and snippets.

@pagueru
Last active June 7, 2025 22:09
Show Gist options
  • Save pagueru/77e0ef23cf4e87ce7563673e0461ab30 to your computer and use it in GitHub Desktop.
Save pagueru/77e0ef23cf4e87ce7563673e0461ab30 to your computer and use it in GitHub Desktop.
/***************************************************************************************************|
| Procedure: [SP_CRIAR_LISTA_TABELAS] |
| Data de Criação: 2024-02-23 |
| Autor: Raphael Coelho |
| |
| Objetivo: Obtém uma lista de todas as tabelas físicas presentes no banco de dados |
| atual, disponibilizando essas informações em uma tabela temporária global. |
| Utiliza a stored procedure 'sp_msforeachdb', que itera por todos os bancos |
| disponíveis no servidor conectado, incluindo o nome do servidor, banco, |
| esquema e tabela. |
| |
| Utilização: EXEC [SP_CRIAR_LISTA_TABELAS] |
| SELECT * FROM ##LISTA_TABELAS |
***************************************************************************************************/
CREATE PROCEDURE [SP_CRIAR_LISTA_TABELAS]
AS
BEGIN
/* ETAPA 1: RETORNA TODAS AS TABELAS DO BANCO */
-- Desativa a contagem de linhas afetadas no painel de resultados
SET NOCOUNT ON;
-- Declara uma tabela de variáveis para armazenar o caminho das tabelas
DECLARE @LISTA_TABELAS TABLE (CAMINHO_COMPLETO NVARCHAR(4000) COLLATE DATABASE_DEFAULT);
-- Insere os caminhos das tabelas na tabela de variáveis usando a stored procedure 'sp_msforeachdb'
INSERT INTO @LISTA_TABELAS (CAMINHO_COMPLETO)
EXEC sp_msforeachdb 'SELECT @@SERVERNAME + ''.'' + ''?'' + ''.'' + B.name + ''.'' + A.name COLLATE DATABASE_DEFAULT
FROM [?].sys.tables AS A
INNER JOIN sys.schemas AS B
ON A.schema_id = B.schema_id';
/* ETAPA 2: GERA A TABELA FINAL */
-- Verifica se a tabela temporária já existe e, se sim, a remove
IF OBJECT_ID('tempdb..##LISTA_TABELAS') <> 0
DROP TABLE ##LISTA_TABELAS;
-- Cria a tabela final com os dados das tabelas encontradas e as ordena por banco
SELECT SUBSTRING(CAMINHO_COMPLETO, 1, CHARINDEX('.', CAMINHO_COMPLETO) - 1) AS NOME_SERVIDOR,
SUBSTRING(CAMINHO_COMPLETO, CHARINDEX('.', CAMINHO_COMPLETO) + 1,
CHARINDEX('.', CAMINHO_COMPLETO, CHARINDEX('.', CAMINHO_COMPLETO) + 1) - CHARINDEX('.', CAMINHO_COMPLETO) - 1) AS NOME_BANCO,
SUBSTRING(CAMINHO_COMPLETO, CHARINDEX('.', CAMINHO_COMPLETO, CHARINDEX('.', CAMINHO_COMPLETO) + 1) + 1,
CHARINDEX('.', CAMINHO_COMPLETO, CHARINDEX('.', CAMINHO_COMPLETO, CHARINDEX('.', CAMINHO_COMPLETO) + 1) + 1) -
CHARINDEX('.', CAMINHO_COMPLETO, CHARINDEX('.', CAMINHO_COMPLETO) + 1) - 1) AS NOME_SCHEMA,
SUBSTRING(CAMINHO_COMPLETO, CHARINDEX('.', CAMINHO_COMPLETO, CHARINDEX('.', CAMINHO_COMPLETO, CHARINDEX('.', CAMINHO_COMPLETO) + 1) + 1) + 1,
LEN(CAMINHO_COMPLETO)) AS NOME_TABELA
INTO ##LISTA_TABELAS
FROM @LISTA_TABELAS
WHERE CAMINHO_COMPLETO NOT LIKE '%tempdb%'
ORDER BY 1, 2, 3, 4;
-- Ativa novamente a contagem de linhas afetadas no painel de resultados
SET NOCOUNT OFF;
-- Mensagem de retorno
PRINT('');
PRINT('EXECUTE A CONSULTA ABAIXO PARA UTILIZAR A TABELA CRIADA.');
PRINT('');
PRINT('SELECT * FROM ##LISTA_TABELAS');
PRINT('_______________________________________________________');
END;
GO
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment