Inquiridor
Encontrar as tabelas que tenha um determinado valor

Pergunta
-
Caros tenho um banco com varias tabelas, sei que em algumas delas tenho um determinado valor;
Tem como montar algo que me mostre em qual das tabelas tem o valor que eu desejo?
Achei uma que me traz em quais tabelas existe uma coluna com um determinado nome.
Todas as Respostas
-
Acredito que voce teria que fazer um looping dinamico buscando em todas as tabelas e todas as colunas, porem dependendo o tamanho do seu banco isto poderia levar horas e até dias, se voce ja sabe achar os nomes das colunas que tem determinado nome, acredito que fique mais facil voce fazer uma busca pelas tabelas que contenham os supostos nomes e fazer selects individualmente...
Alexandre Matayosi Conde Mauricio. Se esta sugestão for útil, por favor, classifique-a como útil. Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.
-
Thiago,
Concordo com a Alexandre, mas veja se este código de exemplo ajuda:
-- Parte 1: Verificando a existência das Tabelas -- If Exists(Select Object_Id('Tabela1')) Drop Table Tabela1 CREATE TABLE Tabela1 (Coluna1 INT, Coluna2 INT, Coluna3 INT) If Exists(Select Object_Id('Tabela2')) Drop Table Tabela2 CREATE TABLE Tabela2 (Coluna1 INT, Coluna2 INT, Coluna3 INT) If Exists(Select Object_Id('Tabela3')) Drop Table Tabela3 CREATE TABLE Tabela3 (Coluna1 INT, Coluna2 INT, Coluna3 INT) -- Parte 2: Inserindo os registros -- INSERT INTO Tabela1 VALUES (1, 2, 3) INSERT INTO Tabela1 VALUES (0, 7, 9) INSERT INTO Tabela1 VALUES (3, 4, 2) INSERT INTO Tabela2 VALUES (2, 2, 2) INSERT INTO Tabela2 VALUES (3, 9, 5) INSERT INTO Tabela2 VALUES (1, 6, 8) INSERT INTO Tabela3 VALUES (4, 0, 7) INSERT INTO Tabela3 VALUES (6, 5, 1) INSERT INTO Tabela3 VALUES (4, 7, 9) -- Parte 3: Declarando as variáveis -- DECLARE @Comando VARCHAR(1000), @ComandoTransact VARCHAR(100), @ValordePesquisa INT, @TABLE_NAME VARCHAR(20), @Coluna_NAME VARCHAR(20) Set @Comando = '' Set @TABLE_NAME = '' Set @Coluna_NAME = '' Set @ComandoTransact = 'SELECT ''?'', ''^'', COUNT(*) AS TOTAL FROM ? WHERE ^ = @ UNION ALL' + CHAR(10) Set @ValordePesquisa = 3 -- Informe o valor a ser pesquisado no Mecanismo. -- Parte 4: Declarando o CursordePesquisa para retornar o nome da tabela e nome da Coluna -- DECLARE CursordePesquisa CURSOR FAST_FORWARD FOR SELECT TABLE_NAME, Column_Name FROM INFORMATION_SCHEMA.Columns -- Abrindo o CursordePesquisa -- OPEN CursordePesquisa FETCH NEXT FROM CursordePesquisa INTO @TABLE_NAME, @Coluna_NAME -- Parte 5: Iniciando o bloco condicional While -- WHILE @@FETCH_STATUS = 0 BEGIN SET @Comando = @Comando + REPLACE(REPLACE(REPLACE(@ComandoTransact,'?',@TABLE_NAME),'^',@Coluna_NAME),'@',@ValordePesquisa) FETCH NEXT FROM CursordePesquisa INTO @TABLE_NAME, @Coluna_NAME END -- Parte 6: Realizando a Concatenação e União dos Selects -- SET @Comando = LEFT(@Comando,LEN(@Comando)-LEN('UNION ALL')-2) -- Parte 7: Criando a Tabela Temporária para armazenar os Resultados -- CREATE TABLE #Resultados (NomeTabela Varchar(20), NomeColuna VARCHAR(20), TotaldeRegistros INT) -- Inserindo os dados na tabela Resultados com base na execução do @Comando -- INSERT INTO #Resultados Exec (@Comando) -- Encerrando o Cursor -- CLOSE CursordePesquisa DEALLOCATE CursordePesquisa -- Apresentando os dados -- SELECT * FROM #Resultados -- Excluíndo a Tabela Temporária Resultados -- DROP TABLE #Resultados
Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]
- Editado Junior Galvão - MVPMVP sábado, 2 de março de 2013 14:36
- Sugerido como Resposta Junior Galvão - MVPMVP sábado, 9 de março de 2013 13:24