【问题标题】:Using Trigger to Create new records using after insert and select from another Table使用触发器使用插入后创建新记录并从另一个表中选择
【发布时间】:2015-04-17 16:55:52
【问题描述】:

希望有人可以帮助我。我已经尝试了许多我发现的触发器,但似乎无法得到我想要的结果。我只能让它为单个记录工作,但在多个记录上失败。我知道这是错误的,但我会发布代码,这样看起来我不会试图让某人为我构建触发器。

这里是场景。我有一个产品、位置和库存表。我要做的是在输入新产品后自动将产品编号添加到余额为 0 的库存表中。但它需要为每个位置记录,所以现在让我们说位置东和西,但可以添加更多。这样,当该位置有库存到达时,他们可以在进出时更新他们的库存。

这就是我现在所拥有的。

USE [TestInventory]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER TRIGGER [dbo].[BalanceUpdate] ON [dbo].[Parts]
FOR INSERT
AS 
declare @PartNumber varchar(50);
declare @Balance smallint = '0';
declare @Location smallint;

SELECT @Location = (Select ID from Location);
Select @PartNumber = PartNumber from inserted ;

Insert into Stock_Balance 
(PartNumber, Location, Balance) Values(@PartNumber, @Location, @Balance);

当然,由于有多个位置 ID 记录,这会失败。我通常只是在这些过程中挣扎,直到我偶然发现可行但确实需要帮助的编码。感谢所有的贡献。

【问题讨论】:

    标签: mysql sql-server select triggers insert


    【解决方案1】:

    插入多行Location。试试这个:

    INSERT INTO Stock_Balance(PartNumber, Location, Balance))
    SELECT @PartNumber, ID, @Balance
    FROM Location
    

    您的触发器现在是:

    ALTER TRIGGER [dbo].[BalanceUpdate] ON [dbo].[Parts]
    FOR INSERT
    AS 
    DECLARE @PartNumber VARCHAR(50);
    DECLARE @Balance SMALLINT = '0';
    SELECT @PartNumber = PartNumber FROM inserted ;
    
    INSERT INTO Stock_Balance(PartNumber, Location, Balance)
        SELECT @PartNumber, ID, @Balance
        FROM Location
    

    【讨论】:

    • 这很有魅力,非常感谢。当您围绕解决方案跳舞然后终于看到它时,真是令人沮丧。
    猜你喜欢
    • 2020-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-23
    • 1970-01-01
    • 1970-01-01
    • 2021-10-23
    相关资源
    最近更新 更多