none
JOINs com Tabelas de Bancos Diferentes, como?? RRS feed

  • 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?

    sexta-feira, 10 de novembro de 2006 16:05

Todas as Respostas

  • select os campos que vc quer from suatabela.dbo.nomedobanco no
        join suatabela.dbo.nomebanco su on os campos que a tabela tem em comun = os campos que a tabela tem em comun

    não sei se vai funcionar, fiz uma fez para teste funcionou.
    sexta-feira, 10 de novembro de 2006 16:39
  • é.. é isso mesmo, acho que meu problema deve ser permisões de usurios...

     

     

    mas e se as bases de dados estiverem em SERVIDORES diferentes, como fazer o join???

    segunda-feira, 13 de novembro de 2006 11:33
  • sem problemas vc. pode usar um linked server, esse recurso pode ligar vc. com outro server sql ou ate mesmo um outro servidor de banco de dados padrao Ole Db.

     

    veja no books on line tem exemplo se precisar de ajuda retorne.

     

    Abs;

    segunda-feira, 13 de novembro de 2006 11:36
  • 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 LinkServer

    LinkServer = "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 LinkServer

    LinkServer = "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.

    sexta-feira, 1 de dezembro de 2006 16:29
  • 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

    sexta-feira, 1 de dezembro de 2006 16:52
  • 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!

    terça-feira, 5 de dezembro de 2006 17:34
  • seria possivel criar um linkedServer de um servidor para ele mesmo????
    terça-feira, 12 de dezembro de 2006 17:11
  • usando o sql nao mais vc. pode usar um oledb passando um catalogo sem problemas. mais eu neste caso usuaria um openrowset ou opendatasource

     

    Abs/

    terça-feira, 12 de dezembro de 2006 17:43
  • teria um exemplo de como fazer este linked server para o mesmo server usando oledb ???  não estou conseguindo cria-lo...
    terça-feira, 6 de fevereiro de 2007 12:39
  • 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.TB01

     

    quando 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?

    terça-feira, 6 de fevereiro de 2007 17:24
  • Aonde eu ponho essa sintaxe pra criar o LinkServer?

    seria no dataset?

    terça-feira, 24 de julho de 2007 16:58