Last active
June 7, 2025 22:09
-
-
Save pagueru/77e0ef23cf4e87ce7563673e0461ab30 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/***************************************************************************************************| | |
| 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