我有一个表如下,初始插入将向“Cur_cost_unit”字段添加一个值,其中“Pre_cost_unit”默认值为0。当我将“Cur_cost_unit”更新为新值时,需要用“Cur_cost_unit”的旧值更新“Pre_cost_unit”,本质上成为“Cur_cost_unit”的历史值。我需要知道,如果我的触发器将在同一时间,“Cur_cost_unit”获得新的价值和Pre_cost_unit”获得的历史价值‘Cur_cost_unit’更新这两个领域Sql触发器将字段值“移动”到同一个表上的另一个字段
我的表:
create table [Prod_Cost]
(
[Ent_id] int not null IDENTITY,
[Prod_name] nvarchar(50) not null,
[Prod_code] nvarchar(50) not null UNIQUE,
[Prod_id] int not null CONSTRAINT [PK_PRODUCT_ID] PRIMARY KEY,
[Cur_cost_unit] money not null DEFAULT(0),
[Pre_cost_unit] money not null DEFAULT(0),
[Dte_Captured] datetime not null,
[Captured_by] char(50) not null
);
我的触发方式:
CREATE TRIGGER Update_Cur_CostUNIT_2PreV
ON [Prod_Cost]
AFTER UPDATE
AS
DECLARE @Cur_cost_unit MONEY;
DECLARE @Prod_code NVARCHAR(50);
SELECT @Cur_cost_unit=i.[Cur_cost_unit] FROM inserted i;
SELECT @Prod_code = i.[Prod_code] from inserted i;
BEGIN
SET NOCOUNT ON;
BEGIN
UPDATE [Prod_Cost]
SET [Pre_cost_unit] = (SELECT [Cur_cost_unit] FROM [Prod_Cost] where [Prod_code] = @Prod_code),
[Cur_cost_unit] = @Cur_cost_unit
END
END
GO
提前感谢
仅供参考 - 触发器应该处理的情况下多行是一次改变。所以在插入和删除的表中可能有多行,你的触发器应该正确处理。 –
您需要重新设置此触发器以设置为基础,而不是使用像这样的标量变量。 –
在更新触发器中。'deleted'将具有以前的值 – JamieD77