Usuário com melhor resposta
Rastrear registro no Banco de Dados SQL Server 2005

Pergunta
-
Bom Dia Srs,Existe a possibilidade de rastrear algum registro em varias tabelas ao mesmo tempo de um banco de dados ??Por exemplo: Tenho uma base de dados com 1500 tabelas e existe o mesmo registro que passa por todas as tabelas, como que eu faço pra reastrear isso ?Quais tabelas passa o registro "Bola" e quais são os campos ?
Respostas
-
E aí thiago,Olha, esse "registro" deve ter uma identificação (um ID). Seria necessário fazer uma busca pelas tabelas que contem essa coluna, e então realizar um SELECT.Vamos ver se esse exemplo lhe atende:
-- tbl temporária q irá conter o resultado CREATE TABLE #Tabelas (Nome VARCHAR(255)) go -- executa o select em cada tabela que tenha a coluna especificada (No exemplo uso a coluna "ID" -- buscando pelo valor 5 INSERT INTO #Tabelas (Nome) EXEC sp_msforeachtable 'if exists (select 1 from sys.syscolumns where name = ''ID'' and id = object_id (''?'')) EXEC (''select ''''?'''' from ? where ID = 5'')' go SELECT * FROM #Tabelas go DROP TABLE #Tabelas
Olha, não sei qual é exatamente sua idéia sobre essa busca, mas terá que fazer algo nesse sentido.Abraço
Classifiquem as respostas. O Fórum agradece!! This posting is provided "AS IS" with no warranties, and confers no rights.- Marcado como Resposta Thiago Batista Ferreira sexta-feira, 21 de maio de 2010 14:28
Todas as Respostas
-
-
-
Thiago,
Você deseja saber por cada tabela que o registro passa?
Isso seria para um registro específico?
Se for poderíamos pensar em criar um trigger que verifica se é o registro, e armazena informações em uma table!!!!
Mas particularmente não vejo como uma solução interessante.
Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA -
E aí thiago,Olha, esse "registro" deve ter uma identificação (um ID). Seria necessário fazer uma busca pelas tabelas que contem essa coluna, e então realizar um SELECT.Vamos ver se esse exemplo lhe atende:
-- tbl temporária q irá conter o resultado CREATE TABLE #Tabelas (Nome VARCHAR(255)) go -- executa o select em cada tabela que tenha a coluna especificada (No exemplo uso a coluna "ID" -- buscando pelo valor 5 INSERT INTO #Tabelas (Nome) EXEC sp_msforeachtable 'if exists (select 1 from sys.syscolumns where name = ''ID'' and id = object_id (''?'')) EXEC (''select ''''?'''' from ? where ID = 5'')' go SELECT * FROM #Tabelas go DROP TABLE #Tabelas
Olha, não sei qual é exatamente sua idéia sobre essa busca, mas terá que fazer algo nesse sentido.Abraço
Classifiquem as respostas. O Fórum agradece!! This posting is provided "AS IS" with no warranties, and confers no rights.- Marcado como Resposta Thiago Batista Ferreira sexta-feira, 21 de maio de 2010 14:28
-
-
Alexandre,
Realmente utilizar o sp_msforeachtale é uma caminho interresante, mas ela poderá se tornar um grande vilão de processamento durante a leitura das tabelas.
O que você acha?
Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA -
Galvão,Foi muito modesto em chamar de "grande vilão"... pode ser um desastre, hehe...Tem que tomar muito cuidado ao usar dessa forma.Vlw
Classifiquem as respostas. O Fórum agradece!! This posting is provided "AS IS" with no warranties, and confers no rights. -
Alexandre,
Que isso, foi um pequeno adjetivo.
Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA- Marcado como Resposta Thiago Batista Ferreira sexta-feira, 21 de maio de 2010 14:28
- Não Marcado como Resposta Thiago Batista Ferreira sexta-feira, 21 de maio de 2010 14:28