我有一個表如下,初始插入將向「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