none
Junção de 02 Query parte II RRS feed

  • Pergunta

  • Boa tarde

     

    Preciso juntar essas duas Query em uma unica procedure.

     

    --EXTRAINDO OS DADOS PARA A DIMENSÃO ATENDENTE

    SELECT FUNCIONARIOS.nome,id_funcionario,sexo,CARGOS.DESCRICAO AS CARGO, localidade

    INTO #ATENDENTES

    FROM CALL_CENTER_OLTP.DBO.FUNCIONARIOS AS FUNCIONARIOS,

    CALL_CENTER_OLTP.DBO.CARGOS AS CARGOS,

    CALL_CENTER_OLTP.DBO.CENTRAIS AS CENTRAIS

    WHERE FUNCIONARIOS.ID_CARGO = CARGOS.ID_CARGO

    AND CENTRAIS.id_Central = FUNCIONARIOS.id_central

     

     

    --PREENCHENDO AS DIMENSÕES atendente


    INSERT
    INTO dimensao_atendente (dimensao_central_id_central, nome, sexo, cargo)

    SELECT DISTINCT dimensao_central.id_central, nome, sexo, cargo

    FROM #ATENDENTES, dimensao_central

    WHERE ( #ATENDENTES.nome_localidade = dimensao_central.localidade

    AND #ATENDENTES.sigla_estado = dimensao_central.sigla_estado )

    AND NOT EXISTS ( SELECT * FROM dimensao_atendente

    WHERE dimensao_central.id_central = dimensao_central.id_central

    AND dimensao_atendente.nome = #ATENDENTES.nome

    AND dimensao_atendente.sexo = #ATENDENTES.sexo

    AND dimensao_atendente.cargo = #ATENDENTES.cargo )

     

    Objetivo dessas duas query é a seguinte.

    1- Pegar os dados de uma banco de dados(call_center_oltp) e inserir em outro banco(call_center_dw), usando uma tabela temporaria para amarzenas os dados. Preciso juntar essas duas query em uma única procedure.

     

    Preciso muito de Ajuda

    Obrigado

     

    terça-feira, 11 de novembro de 2008 16:22

Respostas

  • Boa Tarde,

     

    Para colocar as duas na mesma procedure, basta criar a procedure e colocar o código. Se o objetivo for eliminar a tabela temporária, a grosso modo você pode fazer assim:

     

    Code Snippet

    WITH ATENDENTES AS (

    SELECT FUNCIONARIOS.nome,id_funcionario,sexo,CARGOS.DESCRICAO AS CARGO, localidade

    FROM CALL_CENTER_OLTP.DBO.FUNCIONARIOS AS FUNCIONARIOS,

    CALL_CENTER_OLTP.DBO.CARGOS AS CARGOS,

    CALL_CENTER_OLTP.DBO.CENTRAIS AS CENTRAIS

    WHERE FUNCIONARIOS.ID_CARGO = CARGOS.ID_CARGO

    AND CENTRAIS.id_Central = FUNCIONARIOS.id_central)

     

    --PREENCHENDO AS DIMENSÕES atendente

    INSERT INTO dimensao_atendente (dimensao_central_id_central, nome, sexo, cargo)

    SELECT DISTINCT dimensao_central.id_central, nome, sexo, cargo

    FROM ATENDENTES, dimensao_central

    WHERE ( ATENDENTES.nome_localidade = dimensao_central.localidade

    AND ATENDENTES.sigla_estado = dimensao_central.sigla_estado )

    AND NOT EXISTS ( SELECT * FROM dimensao_atendente

    WHERE dimensao_central.id_central = dimensao_central.id_central

    AND dimensao_atendente.nome = ATENDENTES.nome

    AND dimensao_atendente.sexo = ATENDENTES.sexo

    AND dimensao_atendente.cargo = ATENDENTES.cargo)

     

     

    [ ]s,

     

    Gustavo

    terça-feira, 11 de novembro de 2008 16:28

Todas as Respostas

  • Boa Tarde,

     

    Para colocar as duas na mesma procedure, basta criar a procedure e colocar o código. Se o objetivo for eliminar a tabela temporária, a grosso modo você pode fazer assim:

     

    Code Snippet

    WITH ATENDENTES AS (

    SELECT FUNCIONARIOS.nome,id_funcionario,sexo,CARGOS.DESCRICAO AS CARGO, localidade

    FROM CALL_CENTER_OLTP.DBO.FUNCIONARIOS AS FUNCIONARIOS,

    CALL_CENTER_OLTP.DBO.CARGOS AS CARGOS,

    CALL_CENTER_OLTP.DBO.CENTRAIS AS CENTRAIS

    WHERE FUNCIONARIOS.ID_CARGO = CARGOS.ID_CARGO

    AND CENTRAIS.id_Central = FUNCIONARIOS.id_central)

     

    --PREENCHENDO AS DIMENSÕES atendente

    INSERT INTO dimensao_atendente (dimensao_central_id_central, nome, sexo, cargo)

    SELECT DISTINCT dimensao_central.id_central, nome, sexo, cargo

    FROM ATENDENTES, dimensao_central

    WHERE ( ATENDENTES.nome_localidade = dimensao_central.localidade

    AND ATENDENTES.sigla_estado = dimensao_central.sigla_estado )

    AND NOT EXISTS ( SELECT * FROM dimensao_atendente

    WHERE dimensao_central.id_central = dimensao_central.id_central

    AND dimensao_atendente.nome = ATENDENTES.nome

    AND dimensao_atendente.sexo = ATENDENTES.sexo

    AND dimensao_atendente.cargo = ATENDENTES.cargo)

     

     

    [ ]s,

     

    Gustavo

    terça-feira, 11 de novembro de 2008 16:28
  • vc poderia me exlicar melhor esse comando WITH ????????????

     

    Seria grato,

     

     

     

    terça-feira, 11 de novembro de 2008 16:33
  • Olá Gildo,

     

    A cláusula WITH faz parte dos novos recursos do SQL Server 2005. Ela basicamente dá uma apelido a um SELECT e permite que você ao invés de chamar a consulta chame o apelido (semelhante a uma view). No meu exemplo dei um apelido chamado Atendentes para sua query e posteriormente utilizei-a chamando pelo apelido durante o INSERT. Há mais detalhes sobre esse recurso no link abaixo:

     

    SQL Server 2005 New Features: Common Table Expressions (CTEs)
    http://www.plugmasters.com.br/sys/materias/549/1/SQL-Server-2005-New-Features%3A-Common-Table-Expressions-%28CTEs%29

     

    O script atendeu à sua necessidade ? Ele funcionou ?

     

    [ ]s,

     

    Gustavo

    terça-feira, 11 de novembro de 2008 16:55
  •  

    Vou testar e te passo um retorno

     

    Grato.

    terça-feira, 11 de novembro de 2008 17:35
  • Muito obrigado.. funcionou certinho...

     

    Grato,

     

    quarta-feira, 12 de novembro de 2008 16:31