更新触发器,添加不能正常工作

Update trigger, add not working properly

提前为我的英语道歉,这是问题所在:因为我无法考虑触发器的逻辑,底线是有 2 个 table:

将记录添加到教区杂志中的 table 时,应运行触发器检查 table 是否为空添加新条目(Material,库存数量), 如果 table 有记录则在 Material = (select the part Name From inserted) 的条件下更新它们,但如果 table 有记录并且 Material != select the part Name From inserted) 则添加一条新记录。

触发器代码如下:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER Trigger [dbo].[Application Log Sheet] 
ON [dbo].[Parish magazine]
FOR INSERT 
AS
     DECLARE @a INT;
     DECLARE @b int;

     SELECT @a = COUNT(*) 
     FROM Bill of materials 

     IF @a > 0
     BEGIN
         UPDATE Vedomostithe
         SET Kolichestvennogo = the Number of stock + (select Quantity from inserted)
         WHERE Material = (select the part Name from inserted)
     END
     ELSE IF @a >= 0 
        INSERT INTO Bill of material(Material, Quantity in stock)
            SELECT the part Name, Number
            FROM the arrival Journal
            WHERE [ID] IN (SELECT [ID] FROM inserted)

Table material 账单:

create table Bill of materials 
(
     ID int primary key,
     Material nvarchar(max),
     Quantity in stock int
)

Table到达日志:

create table Journal of the parish
(
     ID int primary key,
     Part name nvarchar(max),
     The number of int
)

一方面,您不应该存储可以计算的数据,因为这样做只是给您一个机会存储的计算与其余数据不一致。因此,我通常建议只使用一个显示总数的视图。

另一方面,这对于 MERGE 来说似乎是一项简单的任务。但我们需要记住 inserted 可以包含 多个 行,并且这些行可能用于多个不同的部分。所以,我们想要这样的东西:

ALTER Trigger [dbo].[Application Log Sheet] 
ON [dbo].[Parish magazine]
for insert
AS

MERGE INTO [Bill of Materials] t
USING (SELECT PART, SUM(Quantity) as Qty from inserted group by PART) s
ON t.Part = s.Part
WHEN MATCHED THEN UPDATE SET Quantity = t.Quantity + s.Qty
WHEN NOT MATCHED THEN INSERT (Part,Quantity) VALUES (s.Part,s.Qty)

如果上面的某些名称不正确,我们深表歉意,但希望您能看到如何调整它以满足您的要求(您的问题似乎在各种 table/column 名称之间来回切换,因此似乎有大约有四个不同的 table 名字,而你在开始提问时说有两个)。