SQL按列计算和更新

时间:2016-09-06 11:38:00

标签: sql tsql

我有一个看起来像这样的存储过程:

BEGIN
Update  Materials
SET     used_last= 
(       
    Select  
            SUM( Amount*used_last)
    FROM    Used_Materials, 
            Materials, 
            PCNs 
    WHERE   Material_NR=@MatNr 
            AND Used_Materials.Material_NR=Materials.Material_NR 
            AND PCNs.Material_NR=@MatNr 
)
FROM    Materials, 
        PCNs
WHERE   Materials.Material_NR=@MatNr 
        AND PCNs.Material_NR=@MatNr
END

必须为每个材质(MatNr)调用此过程。是否可以立即对所有人进行此操作?我偶然发现了CURSORs和MAX Case,但我无法理解它。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

嗯。嗯。 。 。您迫切需要了解如何使用JOIN关键字并限定所有列名称。一个简单的规则:从不FROM子句中使用逗号。 始终使用明确的JOIN语法。

我认为这是您想要的查询:

UPDATE  m
    SET used_last = (SELECT SUM(Amount) * used_last
                     FROM Used_Materials um
                     WHERE um.Material_NR = m.Material_NR 
                    )
    FROM Materials m JOIN
         PCNs
         ON m.Material_NR = PCNs.Material_NR;