假设我有一个名为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)
信息流就是这样。
空的托盘条形码已扫描并从前端插入PALLETS表
一次扫描一个产品,前端将其捕获并将其存储在PARTS表中
在这里我要自动填充PalletID 插入到PRODUCT表中,每个零件记录最多插入托盘上X个零件
此后,前端将清除货盘编号,然后流程重新开始
我遇到的麻烦是,而不是在前端进行编码,我想创建一个SQL触发器,该触发器将自动填充所创建的每个产品记录中的PalletID字段。
建议?感谢您的提前帮助
答案 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
作为该列的值