sql 插入后服务器触发更新插入行的 3 个字段,仅针对特定用户且仅当字段为空时

sql server after insert trigger update 3 fields of inserted row, ONLY for specific users and ONLY if fields are blank

我无权访问插入语句,所以如果它们是空白的,我不知道空白字段是否是插入语句的一部分。 Office 用户和 Field (tablet) 用户使用不同的应用程序插入工单记录。为了让现场用户不必在每条记录上填写他们的船员姓名、主管姓名和商店名称,我将他们放入一个查找 table 中,在工单记录(自动填充)的 INITIATEDBY 字段上键入通过应用程序)。办公室工作人员可能正在为任何人创建工作订单,但现场工作人员仅为他们的工作人员创建工作订单,因此当现场工作人员插入记录时,我想为他们填充 3 个字段。 (实际上他们无法填充这 3 个字段,因为我已将它们隐藏在他们使用的工作订单表中。)

我自己想出来的。我只需要阅读足够多的例子就可以把它们放在一起。唯一让我害怕的是 IF @EMPName <> ''。有没有更好的方法来检查是否在第二个 select 语句中检索到记录?

CREATE TRIGGER trgUpdateCrewShopSuper ON ESDWO
    FOR INSERT
AS
BEGIN
    DECLARE @ID nvarchar(60), @InitBy nvarchar(50), @EMPName nvarchar(50), @CREW as nvarchar(50), @Shop nvarchar(100), @Super nvarchar(50);

select @ID=i.ID, @InitBy=i.INITBY from inserted i;

select @EMPName=EmpName, @CREW=CrewName, @Shop=SHOP, @Super=Supervisor 
    From dbo.TabletUsers 
    WHERE EmpName = @InitBy
IF @EMPName <> ''  
    BEGIN
        update dbo.WorkOrder 
        set Crew = @Crew, SHOP = @Shop, Supervisor = @Super
        WHERE WOID = @ID
    END
END

您的触发代码需要是基于集合的方法。在您发布的答案中,您假设只会插入一行。更符合您的要求。

这将是触发器的整个主体。

Update w
set Crew = tu.Crew
    , SHOP = tu.Shop
    , Supervisor = tu.Supervisor
from inserted i
join TableUsers tu on tu.EmpName = i.INITBY
join WorkOrder w on i.ID = w.WOID