none
Mesma Store Procedure Gerando Resultados Divergentes em Ambiente de Desenvolvimento e Homologação RRS feed

  • Pergunta

  • Oi Pessoal !

     

    Tenho um problema com as store procedure que realiza um select com tabela utilizando o inner join , o problema é que a mesma store pocedure , realiza o select , normalmente no ambiente de desenvolvimento trazendo apenas uma linha de dados  , mas quando ela passa para o ambiente de homologação , está store procedure traz dados duplicados. ela traz duas linha com os mesmos dados .

    O ambiente de desenvolvimento é com o sql server de 32 bits , e o de homologação é com o sql server de 64 bits , será que isso tem alguma diferença na store procedure ? 

    Eu particularmente acho que não , mas  é a unica coisa que é diferente do ambiente de desenvolvimento e homologação,  as tabelas e toda a base de dados é idêntica. 

    Segue abaixo a parte da store procedure que realiza o select .

     

    SELECT c.idcliente, c.razaosocial ,c.nomefantasia ,c.doccliente ,c.ie ,c.pais ,p.pais pnome ,c.cep ,c.endereco ,c.numero ,

                            c.bairro ,c.iduf ,e.sigla ,c.idcid ,m.nome ,c.complemento ,c.telefone ,c.codempresa ,c.codfilial ,

                            c.codusuario ,u.usuario ,c.status ,s.descristatus ,c.atividade,r.descricao  ,c.cfo,c.datacadastro,

                            i.razaosocial rz, f.descricao des, c.nconta

                    FROM   tab_clientes as c  inner join tab_filial as f on  c.codfilial=f.codfilial and f.codempresa =c.codempresa

                          inner join tab_empresa as i on f.codempresa =i.codempresa 

                          inner join tab_municipios as  m on c.idcid =m.idcid 

                          inner join tab_estadoscod as e on m.iduf = e.iduf 

                          inner join tab_paiscod as p on e.codpais =p.codpais

                          inner join tab_usuario as u on c.codusuario =u.codusuario   

                          inner join tab_status as s on c.status = s.status 

                          inner join tab_ramoatividade as r on c.atividade=r.atividade 

                           where   c.razaosocial=@razaosocial

     

    Pode ser algum problema com a estrutura do inner join , pois quando eu retiro o " and f.codempresa =c.codempresa"  localizado na primeira linha da clausula FROM  está store procedure traz 3 linhas dos mesmo dados ,mas quando eu utilizo ela traz apena 2 linhas do mesmo dados . Estranho é que este comportamento deveria ocorrer também na parte de desenvolvimento , mas não ocorre , isso só ocorre no servidor de homologação , é como eu já tinha falado a base de dados da homologação e desenvolvimento são idênticas , a unica coisa que é diferente , é que , o de desenvolvimento é o SQL Serve de 32 bits é o de Homologação é de 64 bits.

     

    Desde já eu agradeço pela atenção e fico no aguardo por alguma resposta ou ajuda na solução deste problema !

    segunda-feira, 26 de dezembro de 2011 05:33

Respostas

  • Oi Pessoal !

     

     

    Descobrir qual era o problema , e vou colocar aqui a solução .

     

    O problema era que a estrutura do banco de do dados foi elaborada para trabalhar com varias empresas e com varias filiais ao mesmo tempo mas eu não imaginei isso na store procedure , pois poderia ter o mesmo código do usuário mas em empresas diferente , como isso não foi tratado na store procedure na base de dados da homologação tinha duas empresas com códigos diferentes , mas com os usuários com o mesmo código porem em empresas diferentes , ai quando execultada a store procedure ela trazia dois resultados pois o código dos usuarios era o mesmo.

    A solução para este problema foi tratar na store procedure no comando inner join o codigo da empresa para o usuario ficando a parte do select com esta estrutura

     

    SELECT c.idcliente, c.razaosocial ,c.nomefantasia ,c.doccliente ,c.ie ,c.pais ,p.pais pnome ,c.cep ,c.endereco ,c.numero ,

                            c.bairro ,c.iduf ,e.sigla ,c.idcid ,m.nome ,c.complemento ,c.telefone ,c.codempresa ,c.codfilial ,

                            c.codusuario ,u.usuario ,c.status ,s.descristatus ,c.atividade,r.descricao  ,c.cfo,c.datacadastro,

                            i.razaosocial rz, f.descricao des, c.nconta

                    FROM   tab_clientes as c  inner join tab_filial as f on  c.codfilial=f.codfilial and f.codempresa =c.codempresa

                          inner join tab_empresa as i on f.codempresa =i.codempresa 

                          inner join tab_municipios as  m on c.idcid =m.idcid 

                          inner join tab_estadoscod as e on m.iduf = e.iduf 

                          inner join tab_paiscod as p on e.codpais =p.codpais

                          inner join tab_usuario as u on c.codusuario =u.codusuario  and u.codempresa= i.codempresa  <=Campo Modificado

                          inner join tab_status as s on c.status = s.status 

                          inner join tab_ramoatividade as r on c.atividade=r.atividade 

                           where  c.razaosocial=@razaosocial

    Repare que a unica coisa que eu coloquei foi a estruição " and u.codempresa= i.codempresa"  comparando o código da empresa do usuario com o código da empresas cadastrada na tabela de empresas , desta forma possibilitou que a store procedure  trouce-se  apenas um linha de dados , e não duplica-se as informações .

     

    Muito obrigado pela atenção e fica ai a solução , caso alguém tenha um problema semelhante ao meu. 

    • Marcado como Resposta AdrianoASantos segunda-feira, 26 de dezembro de 2011 07:22
    segunda-feira, 26 de dezembro de 2011 07:22