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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL Server触发器根据导入时的文件名填写值相关的知识,希望对你有一定的参考价值。

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

当前导入后的示例:

enter image description here

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

目标导入示例

enter image description here

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

答案

下面是一个示例触发器。如果对于具有非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

以上是关于SQL Server触发器根据导入时的文件名填写值的主要内容,如果未能解决你的问题,请参考以下文章

sql server 数据库里设置了当插入数据时,便触发器插入更新时间,但我导入数据时,触发器却没有工作。

SQL Server 根据字段的值触发插入和/或更新的记录

从上面的值填充列值,直到它在SQL Server中达到新值

SQL Server 延迟问题

SQL Server 导入导出向导 - 日期时间错误 - 特定值

Oracle/SQL:将日期和时间连接成单个日期值时的数字格式模型无效