SQL Server 如何使用触发器正确更新值?

ecbunoof  于 2023-01-08  发布在  其他
关注(0)|答案(1)|浏览(336)

我有一个Products表,其中的列为QtySold_DayQtySold_Yesterday,这两个列分别包含今天和昨天的产品销售量信息。
我想创建一个触发器,每当尝试更新QtySold_Day列时,它会将QtySold_Day列中的每个值移动到QtySold_Yesterday
这是我已经有的

create or alter trigger UpdateQuantity 
on Products
instead of update
as
    declare @x int
    set nocount on

    while (@x < @@ROWCOUNT)
    begin
        update Products 
        set QtySold_Day = QtySold_Yesterday 
        where (ProductID = @x)
    end

我想知道我怎样才能完成触发器,使其按预期工作。

yfjy0ee7

yfjy0ee71#

  1. SQL是一种基于集合的语言,因此您应该尝试基于集合的操作。在触发器中,您可以访问一个名为Inserted的伪表,该表包含更新的新详细信息。因此,您可以一次性更新所有相关记录。
    1.正如评论所说,如果记录被多次更新,你可能需要一种方法来避免复制值--所以我添加了一个检查来确保它只发生一次。这可能不是你想要的行为,所以如果你澄清的话,我们可以调整它。
    1.你真的想要一个INSTEAD OF触发器吗?因为它将捕获对这个表的所有更新,并且在大多数情况下什么也不做。
UPDATE Products SET
    QtySold_Day = QtySold_Yesterday 
WHERE ProductID IN (SELECT ID FROM Inserted)
-- Only update once
AND QtySold_Yesterday IS NULL;

相关问题