SQL Server触发器根据导入时的文件名填写值

问题描述 投票:1回答:1

我需要创建一个触发器,根据文件名填写表的项目名称。目前,我可以根据第一个主机名填写导入时的第一个项目名称。

当前导入后的示例:

enter image description here

现在我需要填写Null项目名称的其余部分,其中项目名称对于相应的文件名是非空的。

目标导入示例

enter image description here

如何在每次输入新数据时动态地使其工作?我还想确保它是由文件名完成的,以确保没有更新其他数据集。

sql-server dynamic triggers insert-update
1个回答
2
投票

下面是一个示例触发器。如果对于具有非null ProjectName的同一文件存在多个行,则使用HostName作为平局。插入文件的所有行都将更新为HostName排序的第一个非null ProjectName。

CREATE TABLE dbo.FooBar (
      FileName varchar(100) NOT NULL
    , ProjectName varchar(100) NULL
    , HostName varchar(100) NOT NULL
      CONSTRAINT PK_FooBar PRIMARY KEY CLUSTERED (FileName, HostName)
    );
GO
CREATE TRIGGER TR_FooBar 
ON dbo.FooBar 
FOR INSERT
AS
UPDATE dbo.FooBar
SET ProjectName = (
    SELECT TOP(1) ProjectName
    FROM dbo.FooBar AS source
    WHERE
        source.FileName = inserted.FileName
        AND source.ProjectName IS NOT NULL
    ORDER BY HostName
    )
FROM inserted
WHERE
    inserted.FileName = FooBar.FileName;
GO
© www.soinside.com 2019 - 2024. All rights reserved.