SQL Server-触发器的新增功能-插入第二个表时,将表中的数据插入另一个表

时间:2018-07-05 14:04:07

标签: sql sql-server triggers database-trigger

假设我有一个名为Test的数据库,并且我有两个表PRODUCT&PALLETS。

我是触发器的新手,我想创建一个触发器,该触发器将在PALLETS中存储一个值,并在插入新产品时将其插入PRODUCT,但是X个产品必须在该产品中具有相同的托盘号表。

这是我到目前为止所拥有的

CREATE TRIGGER Test.PALLETS ON Test.PARTS
    AFTER INSERT
AS
BEGIN

    declare @PalletID varchar(50);

    select @PalletID = PALLETS.PalletID from inserted PalletID;

    INSERT INTO PARTS(PalletID)
    VALUES(@PalletID)

信息流就是这样。

  1. 空的托盘条形码已扫描并从前端插入PALLETS表

  2. 一次扫描一个产品,前端将其捕获并将其存储在PARTS表中

  3. 在这里我要自动填充PalletID 插入到PRODUCT表中,每个零件记录最多插入托盘上X个零件

  4. 此后,前端将清除货盘编号,然后流程重新开始

我遇到的麻烦是,而不是在前端进行编码,我想创建一个SQL触发器,该触发器将自动填充所创建的每个产品记录中的PalletID字段。

建议?感谢您的提前帮助

1 个答案:

答案 0 :(得分:0)

根据我能从您的请求中收集的信息,可能会发生以下情况:

Create Trigger Test.Pallets On Parts
    After Insert
As
Begin
    Declare @PalletID varchar(50)

    Select @PalletID = top 1 PalletId
    From Pallet Order by PalletID desc --Assuming your PalletID column is an auto-incrementing primary key, if that's wrong you'll need to change this statement

    Update Parts set PalletID = @PalletID
    Where PartID In ( --Replace PartID with your primary key if it's called something else
        Select PartID
        From Inserted
    )
End

没有保证,因为我不确定您到底想要什么,也没有任何东西可以对此进行测试。

与此相关的一个问题是,如果某人试图批量插入更多的产品,而不是允许一个托盘,那么它将不知道要切换到新的托盘。

编辑:上面的方法仍然应该起作用,但是现在我知道这不是唯一的选择,您可能应该立即修改原始的insert语句以使Select top 1 PalletId From Pallet Order by PalletID desc作为该列的值