Agora, se o banco de dados estiver em outro servidor, você precisa configurar o linked server que esta dentro da pasta security na raiz do Enterprise Manager.
Mas o problema que quero resolver, é saber como que faço para fazer inner join em banco de dados diferentes usando a linguagem JAVA…
B
btafarelo
Rogrido,
Se for entre dois banco de dados no mesmo servidor, não precisa fazer basicamente nada, basta colocar o nome do banco de dados antes do nome da tabela:
banco..tabela
Nem precisa colocar o nome do usuário. A unica diferença na Query é essa, depois é executada dentro de uma Connection só, normalmente.
R
rodrigodsw2005
Nem precisa colocar o nome do usuário. A unica diferença na Query é essa, depois é executada dentro de uma Connection só, normalmente.
btafarelo, pelo que eu sei, na string de conexao, tem que passar o nome do banco de dados, certo? Como os nome são diferentes, tem que ter conexoes diferentes, nao é????
Como fazia tempo que eu não usava isso, fiz um teste antes de responder, e não precisa, veja meu código abaixo:
packageteste;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.ResultSet;importjava.sql.Statement;publicclassMain{publicstaticvoidmain(String[]args){try{Class.forName("net.sourceforge.jtds.jdbc.Driver");Connectioncnn=DriverManager.getConnection("jdbc:jtds:sqlserver://server:1433/banco1");Statementstmt=cnn.createStatement();ResultSetrs=stmt.executeQuery("SELECT * FROM banco1..SOLICITACOES S INNER JOIN NORTHWIND..CATEGORIES C ON S.id = C.CATEGORYID");while(rs.next())System.out.println(rs.getString(2));rs.close();stmt.close();cnn.close();}catch(Exceptionex){ex.printStackTrace();}}}
Não precisa de conexões diferentes, pois que processa a Query é o SQL Server e não o JAVA, é como se você estive executando a Query no QueryAnalizer, é um recurso do Server.
R
rodrigodsw2005
Velho… vou testar agooora isso… depois respondo aqui para a comunidade…
Grato
T+
R
rodrigodsw2005
tafarelo, cara voce salvou o dia ! finalmente coloquei para funcionar o relatorio! pois eu nao estava conseguindo fazer esse relatorio no IREPORT de jeito nenhum.
Para os gujeseiros de plantao, a solução para gerar relatorios em 2 banco de dados diferentes é usar a seguinte estrutura no sql (sqlserver):
nomedobanco.proprietario.tabela.campo
Exemplo:
sysaval.dbo.funcionario.nome
segue o codigo:
SELECT pfunc.nome, sum(pontuacao.valorpontuacao) as pontuacao
FROM CORPORERM.dbo.PFUNC PFUNC
inner join
bdavalfunc.dbo.prova prova on
prova.idfunc = pfunc.chapa
inner join
bdavalfunc.dbo.pontuacao pontuacao on
prova.idpontuacao = pontuacao.idpontuacao
WHERE (prova.ano = $P{ANO})
group by PFUNC.chapa, PFUNC.nome order by pontuacao desc
Só tive uma dúvida, e se utilizarmos os 2 banco de dados em 2 servidores diferentes? Qual é a solução? teria que passar o ip na consulta?