Usuário com melhor resposta
Select onde o Join vem de bancos e tabelas diferentes

Pergunta
-
Pessoal, preciso fazer uma consulta só que o join pode ser feito com databases, tabelas diferentes. Eis um exemplo
Tabela Debitos
Codigo_Origem Cadastro
1 012030
2 034040
3 056060
Criei uma tabela de parametro para saber onde tenho que buscar o nome do meu cliente. Exemplo
Codigo_Origem Banco_Dados Tabela Coluna Coluna_Nome
1 Cliente Cliente Codigo Nome_Cliente
2 Parceiro Parc Codigo_P Nome
3 Fornecedor Forneced Inscricao Razao_Social
No primeiro registro, por exemplo, eu devo buscar o nome no banco de dados cliente, na tabela cliente, fazendo join de Cadastro com Codigo, retornando a coluna nome_cliente
Tem como eu fazer este select?
Respostas
-
Danilo,
Seria algo +/- assim
declare @tbOrigem table (Codigo_Origem int, Cadastro varchar(10)) insert into @tbOrigem values (1,'012030'),(2,'034040'),(3,'056060') declare @tbParametro table (Codigo_Origem int, Banco_Dados varchar(20), Tabela varchar(20), Coluna varchar(20), Coluna_Nome varchar(20)) insert into @tbParametro values(1,'Cliente','Cliente','Codigo','Nome_Cliente') ,(2,'Parceiro','Parc','Codigo_P','Nome') ,(3,'Fornecedor','Forneced','Inscricao','Razao_Social') declare @strSQL varchar(max) select @strSQL='SELECT '+a.Coluna +','+ a.Coluna_Nome +' FROM '+a.Banco_Dados+'..'+a.Tabela+' WHERE '+a.coluna+' = '+ b.Cadastro FROM @tbParametro a inner join @tbOrigem b on a.Codigo_Origem=b.Codigo_Origem WHERE a.Codigo_Origem=1 --print @STRSQL exec(@STRSQL)
Att.
Marcelo FernandesMCP, MCDBA, MCSA, MCTS.
Se útil, classifique!!!
Me siga no twitter: @marcelodba- Marcado como Resposta Danilo Rogério sexta-feira, 15 de julho de 2011 18:32
Todas as Respostas
-
Danilo,
Se forem apenas bases diferentes:
SELECT a.*, b.*
FROM Base1.dbo.Tabela1 a INNER JOIN Base2.dbo.Tabela2 b on (a.CampoPK=b.CampoFK)
Se forem instancias diferentes:
Crie um linked server para a outra instancia e:
SELECT a.*, b.*
FROM LInkedServer.Base1.dbo.Tabela1 a INNER JOIN Base2.dbo.Tabela2 b on (a.Campo1=b.Campo2)
Fabrizzio A. Caputo
Certificações: Oracle OCA 11g, MCITP SQL Server 2008 Implementation and Maintenance
Blog Pessoal: www.fabrizziocaputo.wordpress.com
Blog Empresa: www.tripletech.com.br/blog
Twitter: @FabrizzioCaputo
Email: fabrizzio.antoniaci@gmail.com -
Fabrizzio, o join não é simples assim.
Veja que quando o Codigo_Origem for 1 eu vou em um banco, tabela e coluna diferente para fazer o join
Quando o Codigo_Origem for 2, vou noutro lugar, e assim por diante.
A princípio não queria fazer um Case e montar um select para cada situacao, pensei em fazer isso dinamicamente utilizando a tabela de parâmetro.
Entendeu?
-
-
Danilo,
Seria algo +/- assim
declare @tbOrigem table (Codigo_Origem int, Cadastro varchar(10)) insert into @tbOrigem values (1,'012030'),(2,'034040'),(3,'056060') declare @tbParametro table (Codigo_Origem int, Banco_Dados varchar(20), Tabela varchar(20), Coluna varchar(20), Coluna_Nome varchar(20)) insert into @tbParametro values(1,'Cliente','Cliente','Codigo','Nome_Cliente') ,(2,'Parceiro','Parc','Codigo_P','Nome') ,(3,'Fornecedor','Forneced','Inscricao','Razao_Social') declare @strSQL varchar(max) select @strSQL='SELECT '+a.Coluna +','+ a.Coluna_Nome +' FROM '+a.Banco_Dados+'..'+a.Tabela+' WHERE '+a.coluna+' = '+ b.Cadastro FROM @tbParametro a inner join @tbOrigem b on a.Codigo_Origem=b.Codigo_Origem WHERE a.Codigo_Origem=1 --print @STRSQL exec(@STRSQL)
Att.
Marcelo FernandesMCP, MCDBA, MCSA, MCTS.
Se útil, classifique!!!
Me siga no twitter: @marcelodba- Marcado como Resposta Danilo Rogério sexta-feira, 15 de julho de 2011 18:32
-
-
não... vc não consegue executar query dinâmica em uma view... somente em proc e como script mesmo...
mas se vc relamente precisa construir um script com query dinâmica, vc pode inserir os reusltados da query dinamica em uma tabela temporaria e ai fazer o join..
Att.
Marcelo Fernandes
MCP, MCDBA, MCSA, MCTS.
Se útil, classifique!!!
Me siga no twitter: @marcelodba -