Usuário com melhor resposta
Mesma Store Procedure Gerando Resultados Divergentes em Ambiente de Desenvolvimento e Homologação

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 !
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