none
Update no Codigo SQL abaixo RRS feed

  • Pergunta

  • Necessito zerar uma determinada variável no código abaixo e o retorno é :

    (10 linha(s) afetadas)

    Mensagem 208, Nível 16, Estado 1, Linha 37

    Nome de objeto 'AC' inválido.

    Peço ajuda para solucionar o problema.

    Agradeço antecipadamente a atenção dispensada.

    Newton Costa

    ;with
    Acum_Compra as (
    SELECT [prazo-compra].[it-codigo], Sum([prazo-compra].[quant-saldo]) as [saldo]
      from [prazo-compra]
      INNER JOIN [ordem-compra]
      ON [prazo-compra].[numero-ordem] = [ordem-compra].[numero-ordem]    AND  [prazo-compra].[it-codigo] = [ordem-compra].[it-codigo]      
      AND  [ordem-compra].[num-pedido] > 0
    WHERE
          [prazo-compra].situacao >= 2 and [prazo-compra].situacao <= 3
          
    GROUP BY [prazo-compra].[it-codigo]
    )
     
    SELECT
           [saldo-estoq].[it-codigo]
          ,[saldo-estoq].[qtidade-atu] as saldo_atu
          ,[item].[desc-item]
          ,[item].[codigo-refer]
          ,depos.depos1
       ,IsNull([AC].[saldo], 0) as [saldo-compras]
      
      FROM     [saldo-estoq]
    INNER JOIN item
        ON     [saldo-estoq].[it-codigo] = item.[it-codigo]
    INNER JOIN depos
         ON    [saldo-estoq].[cod-depos] = depos.[co-depos]
    LEFT JOIN  Acum_Compra as AC
        ON     [saldo-estoq].[it-codigo] = AC.[it-codigo]
     WHERE     [item].[cod-obsoleto] = 1
          AND  [item].[it-codigo] like  'seahddn' +'%'   
          AND ([saldo-estoq].[qtidade-atu] > 0   )
     ORDER BY  depos.depos1 desc;

    update [AC] set [saldo-compras] = 0  where depos1 = 'rma'  (inclui este comando para zerar a variável)

    quinta-feira, 3 de julho de 2014 13:42

Respostas

  • Newton,

    Em qual parte do código você esta declarando a sua variável?

    Você esta tentando fazer o Update de AC? Mas se eu entendi este AC é um alias da sua CTE Acum_Compra?

    Se for isso mesmo, realmente não vai rolar, pois a CTE já esta sendo utilizada na seu Select.

    Acredito que neste caso, você terá que fazer um Update From, utilizando a sua table e a sua CTE no Update, veja se este exemplo ajuda:

    USE AdventureWorks2012;
    GO
    WITH Parts(AssemblyID, ComponentID, PerAssemblyQty, EndDate, ComponentLevel) AS
    (
        SELECT b.ProductAssemblyID, b.ComponentID, b.PerAssemblyQty,
            b.EndDate, 0 AS ComponentLevel
        FROM Production.BillOfMaterials AS b
        WHERE b.ProductAssemblyID = 800
              AND b.EndDate IS NULL
        UNION ALL
        SELECT bom.ProductAssemblyID, bom.ComponentID, p.PerAssemblyQty,
            bom.EndDate, ComponentLevel + 1
        FROM Production.BillOfMaterials AS bom 
            INNER JOIN Parts AS p
            ON bom.ProductAssemblyID = p.ComponentID
            AND bom.EndDate IS NULL
    )
    UPDATE Production.BillOfMaterials
    SET PerAssemblyQty = c.PerAssemblyQty * 2
    FROM Production.BillOfMaterials AS c
    JOIN Parts AS d ON c.ProductAssemblyID = d.AssemblyID
    WHERE d.ComponentLevel = 0;



    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]


    quinta-feira, 3 de julho de 2014 14:07

Todas as Respostas

  • Newton,

    Em qual parte do código você esta declarando a sua variável?

    Você esta tentando fazer o Update de AC? Mas se eu entendi este AC é um alias da sua CTE Acum_Compra?

    Se for isso mesmo, realmente não vai rolar, pois a CTE já esta sendo utilizada na seu Select.

    Acredito que neste caso, você terá que fazer um Update From, utilizando a sua table e a sua CTE no Update, veja se este exemplo ajuda:

    USE AdventureWorks2012;
    GO
    WITH Parts(AssemblyID, ComponentID, PerAssemblyQty, EndDate, ComponentLevel) AS
    (
        SELECT b.ProductAssemblyID, b.ComponentID, b.PerAssemblyQty,
            b.EndDate, 0 AS ComponentLevel
        FROM Production.BillOfMaterials AS b
        WHERE b.ProductAssemblyID = 800
              AND b.EndDate IS NULL
        UNION ALL
        SELECT bom.ProductAssemblyID, bom.ComponentID, p.PerAssemblyQty,
            bom.EndDate, ComponentLevel + 1
        FROM Production.BillOfMaterials AS bom 
            INNER JOIN Parts AS p
            ON bom.ProductAssemblyID = p.ComponentID
            AND bom.EndDate IS NULL
    )
    UPDATE Production.BillOfMaterials
    SET PerAssemblyQty = c.PerAssemblyQty * 2
    FROM Production.BillOfMaterials AS c
    JOIN Parts AS d ON c.ProductAssemblyID = d.AssemblyID
    WHERE d.ComponentLevel = 0;



    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]


    quinta-feira, 3 de julho de 2014 14:07
  • Obrigado,

    Funcionou corretamente

    sexta-feira, 4 de julho de 2014 15:12