这是我的第一篇文章,请耐心等待。以下是我正在使用的表格,我只展示了相关的列:
运动:
id
cnt_tare_weight
chassis_tare_weight
停止:
movement_id
order_id
对于每个移动记录,有2个或更多停止记录。这种方式的作用是我们创建一个订单并创建止损。停靠点分为动作。
以下是一些示例数据:
运动:
id cnt_tare_weight chassis_tare_weight
-------------------------------------------------
1545257 4525.2 3652.2
1545258 null null
停止:
order_id movement_id
------------------------
0933774 1545257
0933774 1545257
0933774 1545258
0933774 1545258
这是我想要完成的事情:
在cnt_tare_weight
记录中更新chassis_tare_weight
和/或movement
时,我需要将此数据复制到该订单的所有其他移动记录中。我想在更新后使用触发器来执行此操作。
以下是我提出的建议,但我不确定它是否会奏效。我想看看我想做的事情是否正确,或者我是否遗漏了什么。
这是我的SQL:
CREATE TRIGGER set_tare_weights
ON movement
AFTER UPDATE AS
BEGIN
SET NOCOUNT ON;
DECLARE @movement_id AS INT;
DECLARE @cnt_tare_weight AS DECIMAL(8,1);
DECLARE @chz_tare_weight AS DECIMAL(8,1);
DECLARE @order_id AS int;
SELECT @movement_id = inserted.id
FROM INSERTED
IF update(cnt_tare_weight)
BEGIN
SET @cnt_tare_weight = 'Updated cnt_tare_weight'
END
IF update(chz_tare_weight)
BEGIN
SET @chz_tare_weight = 'Updated chz_tare_weight'
END
SELECT @order_id = order_id
FROM stop
WHERE movement_id = @movement_id
UPDATE movement
SET cnt_tare_weight = @cnt_tare_weight,
chz_tare_weight = @chz_tare_weight
WHERE @movement_id IN (SELECT DISTINCT movement_id
FROM stop
WHERE order_id = @order_id)
AND id <> @movement_id
END
之前我从未创建过SQL Server触发器。我不确定这是否有效,或者我是否需要做更多的事情。我是否需要创建一个调用存储过程的触发器?或者上述工作?
感谢您的帮助!