SQL - UNION
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
Curtidas 0
Melhor post
Emerson Nascimento
14/03/2019
talvez ele se baseie no tipo de campo da última tabela utilizada.
GOSTEI 1
Mais Respostas
Emerson Nascimento
13/03/2019
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.
GOSTEI 0
Chromusmaster
13/03/2019
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.
GOSTEI 0