我有two个Stocks号桌和Purchases号桌
CREATE TABLE Stocks
(
id int PRIMARY KEY IDENTITY(1,1),
itemId int NOT NULL,
qty int NOT NULL,
status NVarChar(50) NOT NULL,
)
CREATE TABLE Purchases
(
id int PRIMARY KEY IDENTITY(1,1),
itemId int NOT NULL,
suppId int NOT NULL,
qty int NOT NULL,
Date NVarChar(50) NOT NULL,
status NVarChar(50) NOT NULL,
)
以下是我想要做的:
在将多个记录插入到Purchases表中时,我希望创建一个触发器来迭代插入的每个记录,并判断Stocks表中的ItemID
更新找到的每个ItemID的TheQuantity(本例中为qty),如果找不到ItemID,则插入到Stocks表中
我已经try 了几种方法,实际上从昨天开始我就一直在与之斗争.
this Post是我见过的最近的一次,但我能弄清楚是怎么回事,看起来它只是在更新现有的记录
这是我到目前为止试过的方法,我是说我最接近的
CREATE trigger [dbo].[trPurchaseInsert] on [dbo].[Purchases] FOR
INSERT
AS
DECLARE @id int;
DECLARE @itemId int;
DECLARE @status NVarChar(50) = 'available';
SELECT @itemId=i.ItemId FROM INSERTED i
IF EXISTS(SELECT * FROM Stocks WHERE itemId=@itemId)
BEGIN
SET NOCOUNT ON;
DECLARE @itemIdUpdate int;
DECLARE @qty int;
SELECT @qty=[quantity], @itemIdUpdate=[itemId] FROM INSERTED i
UPDATE Stocks SET qty=qty+@qty WHERE itemId=@itemIdUpdate
END
ELSE
BEGIN
SET NOCOUNT ON;
INSERT INTO Stocks SELECT [itemId], [id], [quantity], @status
FROM INSERTED i
END
这在单个插入中运行良好,但在一次将多条记录插入到采购表中时就不起作用了
上面的触发器只更新第一个Itemid,如果找到一个Itemid,则不会更新其余Itemid,甚至不会插入新的Itemid
这里的目标是如果找到itemid则更新库存项目,如果没有找到itemid则插入
欲了解更多详情,请点击see this SQL Fiddle.它包含我try 过的带有注释详细信息的表格(&A
我看到了几条建议使用set base operations with joins的 comments ,但想不出方向
我怎么才能让它工作呢?