none
Dúvida With RRS feed

  • Pergunta

  • Galera,

     

    Gostaria de tirar duas dúvidas:

     

    1) Quando tento executar o comando abaixo ele dá erro pq estou colocando um comando truncate antes de executar a sequencia de WITH.

     

    2) Após a mesma sequencia de WITH eu utilizo os mesmo pra inserção e atualização de algumas tabelas, porém a inserção é efetuada com sucesso, mas o Update não.

     

    Poderiam ajudar?

     

    Code Snippet

    --Truncate Table dbo.D_Pontual_Estudo_Fx_Atraso_Vecto

    --Busca todas as contas vencidas em Set/08

    With Fat_Vecto As (

    Select Invoice_Account_Id as Conta_Arbor, Invoice_Id as Id_Fatura, Original_Amount as Vl_Aberto, INVOICE_DUE_DATE as Dt_Vecto

    From D_Faturas_Oi

    Where INVOICE_DUE_DATE Between '2008-09-01' and '2008-09-30'

    Group By Invoice_Account_Id, Invoice_Id, Original_Amount, INVOICE_DUE_DATE

    ),

    Fat_Vs_Cli As (

    Select DCO.Serv_Inst_Rateplan, FV.Conta_Arbor, FV.Id_Fatura, FV.Vl_Aberto, FV.Dt_Vecto

    From Fat_Vecto FV

    Left Outer Join D_Cliente_Oi DCO

    On cast(DCO.ContArbor as varchar) = FV.Conta_Arbor

    Group By DCO.Serv_Inst_Rateplan, FV.Conta_Arbor, FV.Id_Fatura, FV.Vl_Aberto, FV.Dt_Vecto

    ),

    FatPaga As (

    Select Invoice_Id, Sum(Payment_Amount) as Vl_Pgto, Max(Payment_Date) as Dt_Pgto

    From D_Faturas_Pagas_Oi

    Group By Invoice_Id

    )

    --Insere Faturas na tabela

    Insert D_Pontual_Estudo_Fx_Atraso_Vecto

    Select *, Null, 0, 0 From Fat_Vs_Cli

    --Atualiza tabela com as informações de Pgto

    Update D_Pontual_Estudo_Fx_Atraso_Vecto

    Set Dt_Pgto = FPG.Dt_Pgto,

    Vl_Pgto = FPG.Vl_Pgto

    From D_Pontual_Estudo_Fx_Atraso_Vecto DPF

    Inner Join FatPaga FPG

    On DPF.Invoice_Id = FPG.Invoice_Id

     

     

    sexta-feira, 3 de outubro de 2008 19:18

Respostas

  • Olá Daniel,

     

    Facilitaria muito se você nos passasse as mensagens de erro, afinal se um UPDATE não funcionou ou o WITH deu problema isso pode se dar por muitas razões. O que posso supor é que após o TRUNCATE você deve usar o ; antes do WITH para impedir ambiguidades do comando. Ex:

     

    Code Snippet

    Truncate Table dbo.D_Pontual_Estudo_Fx_Atraso_Vecto;

    --Busca todas as contas vencidas em Set/08

    With Fat_Vecto

     

     

    As CTEs facilitam o comando, mas acho que só podem ser utilizadas uma única vez então não sei se funcionaria para os dois comandos.

     

    [ ]s,

     

    Gustavo

     

    sexta-feira, 3 de outubro de 2008 19:24

Todas as Respostas

  • Olá Daniel,

     

    Facilitaria muito se você nos passasse as mensagens de erro, afinal se um UPDATE não funcionou ou o WITH deu problema isso pode se dar por muitas razões. O que posso supor é que após o TRUNCATE você deve usar o ; antes do WITH para impedir ambiguidades do comando. Ex:

     

    Code Snippet

    Truncate Table dbo.D_Pontual_Estudo_Fx_Atraso_Vecto;

    --Busca todas as contas vencidas em Set/08

    With Fat_Vecto

     

     

    As CTEs facilitam o comando, mas acho que só podem ser utilizadas uma única vez então não sei se funcionaria para os dois comandos.

     

    [ ]s,

     

    Gustavo

     

    sexta-feira, 3 de outubro de 2008 19:24
  • Funcionou, colocando o " ; " para a outra questão. Tem ideia?

    sexta-feira, 3 de outubro de 2008 19:31
  • Alves,

     

    Isso é comum acontecer no SQL Server 2005, pois o ponto e vírgula representa um delimitador de linha de comando, e que em alguns casos dependendo do comando transacional é necessário informá-lo.

    sexta-feira, 3 de outubro de 2008 20:08
  • Boa Tarde Daniel,

     

    Você ainda não informou as mensagens de erro como solicitamos.

    Em todo caso, para a segunda mensagem, acredito que o fato se dê pela explicação que lhe passei. A CTE só pode ser usada uma vez. Veja que o código abaixo gera um erro justamente porque o primeiro SELECT usa a CTE e o segundo não poderá utilizá-la.

     

    Code Snippet

    WITH C AS (SELECT 1 AS NUM)

    SELECT * FROM C

    SELECT * FROM C

     

     

    [ ]s,

     

    Gustavo

    sexta-feira, 3 de outubro de 2008 20:20