Inquiridor
JOINs com Tabelas de Bancos Diferentes, como??

Pergunta
-
Ola..
Dois Bancos, criados por dois usuarios diferentes, no aplicação até agora estava usando duas conexões, uma para cada banco, porem agora preciso fazer um SELECT que faça um INNER JOIN entre tabelas dos dois banco... como posso fazer isto?
Todas as Respostas
-
-
-
-
Amizade,
vou colocar aqui o q eu fiz para me conectar com linkserver e fazer o select. Espero que lhe ajude, caso vc ñ tenho conseguido ainda.
Aqui fiz o link com o banco e com a tabela que quero.
LinkServer = "sp_dropserver 'lnkBanco', 'droplogins'"
Banco.Execute LinkServerLinkServer = "sp_addlinkedserver @server = N'lnkBanco', " _
& "@srvproduct = N' ', " _
& "@provider = N'SQLOLEDB', " _
& "@datasrc = N'" & Banco & "', " _
& "@catalog = N'Banco'"
Banco.Execute LinkServer
LinkServer = "sp_addlinkedsrvlogin 'lnkBanco', 'false', NULL, '" & oLogIn & "', '" & pPWD & "'"
Banco.Execute LinkServerLinkServer = "lnkBanco.Banco.DBO.tbl"
Aqui fiz o Select.
cmdRs = "SELECT a.Nome, b.CDN, COUNT(c.IDDOT) AS Total " _
& "FROM tbl_Func AS a, tbl_Condomino AS b, " _
& LinkServer & " AS c " _
& "WHERE a.rCDN = b.IDCDN AND a.Matricula = c.rMatri " _
& " AND c.fCat = 2 AND " _
& "GROUP BY a.Nome, b.CDN " _
& "ORDER BY b.CDN ASC"Sei q está meio enrolado, mas mas espero q possa ajudar.
Abs.
-
ThePhantom,
Você deveria utilizar um linked server, trata-se de um canal de comunicação segura, entre um ou mais servidores de banco de dados.
Veja o exemplo, para criar e acessar os dados:
select * from sysservers
Exec sp_addlinkedserver
@server='SERVERWIN2003',
@srvproduct='SQL Server'Exec sp_addlinkedsrvlogin
@rmtsrvname='SERVERWIN2003',
@useself='False',
@locallogin='JUNIOR',
@rmtuser='JUNIOR',
@rmtpassword='pdjm3825'SELECT * FROM SERVERWIN.CUSTO100.dbo.CUSTO
WHERE CODPROD='4700051/52/53'SELECT * FROM SERVERWIN.CUSTO100.dbo.FICHAIMPRESSA
SELECT DATEPART(MONTH,EDATA) AS MES,DATEPART(YEAR,EDATA) AS ANO,* FROM SERVERWIN.CUSTO100.DBO.FICHAIMPRESSA
WHERE CODPROD = '4700034/37' AND NUMFICHA = 26207
ORDER BY EDATA -
Boa tarde!
Se os dois bancos estiverem no mesmo server é assim:
select t1.*, t2.* (é um exemplo didatico, o ideal é escrever apenas os campos requeridos)
from nomedobanco.donodoobjeto.nomedatabela t1 inner join nomedobanco.donodoobjeto.nomedatabela t2 on t1.campo1 = t2.campo2
Bem, é isso!
Qualquer coisa, reporte!
Abracos! -
-
-
-
consegui fazer o linkedserver de um servidor com ele mesmo usando oledb... porém não consigo trabalhar com DISTRIBUTED TRANSACTIONS com esse linkedserver local..
ocorre o seguinte erro:
Server: Msg 7391, Level 16, State 1, Line 1
The operation could not be performed because the OLE DB provider 'SQLOLEDB' was unable to begin a distributed transaction.
[OLE/DB provider returned message: A nova transação não pode ser inscrita no coordenador de transação especificado. ]
OLE DB error trace [OLE/DB Provider 'SQLOLEDB' ITransactionJoin::JoinTransaction returned 0x8004d00a].ao tentar executar isto:
BEGIN DISTRIBUTED TRANSACTION
SELECT * FROM TESTE.MODEL.DBO.TB01quando o linkedserver é em outro servidor sql em outra maquina as DISTIBUTED TRANSACTIIONS funcionam legal...
alguem sabe oque pode estar ocorrendo?? alguma restrição do sqlserver?
-