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



我有一个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

我想知道如何完成触发器,使其按预期工作。

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

相关内容

  • 没有找到相关文章

最新更新