SQL - UNION
13/03/2019
0
Tenho a seguinte consulta
Antes de colocar o campo como varchar o retorno do union colocava o Código do participante como inteiro, isto sem ter sido definido. Nas tabelas onde o campo é buscado apenas o código da pessoa é inteiro todo o restante é Varchar (vide função SP_HELP).
Gostaria de entender o por que disto. Alguém sabe dizer?
SELECT SATIVIDADEALUNO.CODCOLIGADA, SATIVIDADEALUNO.IDATIVIDADE, SATIVIDADEALUNO.IDOFERTA, SATIVIDADE.DESCRICAO, CONVERT(VARCHAR(MAX), SATIVIDADEALUNO.RA) CODPARTICIPANTE, PPESSOA.NOME NOMEPARTICIPANTE, 'A' TIPOPARTICIPANTE, 'Aluno' TIPOPARTICIPANTEDESCRICAO, SALUNO.CODPESSOA FROM SALUNO (NOLOCK) INNER JOIN SHABILITACAOALUNO (NOLOCK) ON SHABILITACAOALUNO.RA = SALUNO.RA AND SHABILITACAOALUNO.CODCOLIGADA = SALUNO.CODCOLIGADA INNER JOIN SATIVIDADEALUNO (NOLOCK) ON SATIVIDADEALUNO.IDHABILITACAOFILIAL = SHABILITACAOALUNO.IDHABILITACAOFILIAL AND SATIVIDADEALUNO.RA = SHABILITACAOALUNO.RA AND SATIVIDADEALUNO.CODCOLIGADA = SHABILITACAOALUNO.CODCOLIGADA INNER JOIN PPESSOA (NOLOCK) ON PPESSOA.CODIGO = SALUNO.CODPESSOA INNER JOIN SATIVIDADE (NOLOCK) ON SATIVIDADE.CODCOLIGADA = SATIVIDADEALUNO.CODCOLIGADA AND SATIVIDADE.IDOFERTA = SATIVIDADEALUNO.IDOFERTA WHERE CUMPRIUATIVIDADE = 'N' AND SATIVIDADEALUNO.IDPERLET = @P AND SATIVIDADEALUNO.IDOFERTA = :IDOFERTA UNION SELECT SATIVIDADEPROFESSOR.CODCOLIGADA, SATIVIDADEPROFESSOR.IDATIVIDADEPROF, SATIVIDADEPROFESSOR.IDOFERTA, SATIVIDADE.DESCRICAO, CONVERT(VARCHAR(MAX), SATIVIDADEPROFESSOR.CODPROF) CODPARTICIPANTE, PPESSOA.NOME NOMEPARTICIPANTE, 'P' TIPOPARTICIPANTE, 'Professor' TIPOPARTICIPANTEDESCRICAO, SPROFESSOR.CODPESSOA FROM SATIVIDADEPROFESSOR INNER JOIN SATIVIDADE (NOLOCK) ON SATIVIDADE.CODCOLIGADA = SATIVIDADEPROFESSOR.CODCOLIGADA AND SATIVIDADE.IDOFERTA = SATIVIDADEPROFESSOR.IDOFERTA INNER JOIN SPROFESSOR (NOLOCK) ON SPROFESSOR.CODPROF = SATIVIDADEPROFESSOR.CODPROF AND SPROFESSOR.CODCOLIGADA = SATIVIDADEPROFESSOR.CODCOLIGADA INNER JOIN PPESSOA (NOLOCK) ON PPESSOA.CODIGO = SPROFESSOR.CODPESSOA WHERE CUMPRIUATIVIDADE = 'N' AND DTINICIO >= @DTI AND DTTERMINO <= @DTF AND SATIVIDADEPROFESSOR.IDOFERTA = :IDOFERTA
Antes de colocar o campo como varchar o retorno do union colocava o Código do participante como inteiro, isto sem ter sido definido. Nas tabelas onde o campo é buscado apenas o código da pessoa é inteiro todo o restante é Varchar (vide função SP_HELP).
Gostaria de entender o por que disto. Alguém sabe dizer?
Chromusmaster
Curtir tópico
+ 0
Responder
Post mais votado
14/03/2019
talvez ele se baseie no tipo de campo da última tabela utilizada.
Emerson Nascimento
Responder
Mais Posts
13/03/2019
Emerson Nascimento
Você obtém o resultado de CODPARTICIPANTE de campos de duas tabelas distintas: SATIVIDADEALUNO.RA e SATIVIDADEPROFESSOR.CODPROF.
Acredito que um desses campos deve estar definido como inteiro.
Acredito que um desses campos deve estar definido como inteiro.
Responder
13/03/2019
Chromusmaster
Você obtém o resultado de CODPARTICIPANTE de campos de duas tabelas distintas: SATIVIDADEALUNO.RA e SATIVIDADEPROFESSOR.CODPROF.
Acredito que um desses campos deve estar definido como inteiro.
Na verdade são de três tabela, a consulta anterior é apenas um trecho dela. Na terceira tabela o codigo do participante é definido como inteiro. Nestes casos, o Union vai se basear na diferença entre os campos? Deveria ter pedo varchar, já que dois campo são varchar, não?Acredito que um desses campos deve estar definido como inteiro.
Responder
Clique aqui para fazer login e interagir na Comunidade :)