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 = :IDOFERTAAntes 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