SQL Server触发器根据上面的文件名和值填充Null值

Posted

tags:

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

我需要创建一个触发器来帮助我填写项目名称列的其余部分。项目名称来自我的Hostname列,但是我可能在导入时有多组Hostnames。我当前的触发器允许我填写我的项目列,如下所示:

当前触发结果:

enter image description here

我需要更新我的触发器,以便填充其余的空值,并使用相应的主机名填充项目名称。

期望的触发结果:

enter image description here

我需要这个触发器动态工作,因此它将在导入时填充任意数量的行和项目。我还想使用Filename作为更新的标准,因此它不会意外更新导入的任何其他数据集。

当前触发代码: 这是我拥有的当前触发器,它允许我获取项目名称。

CREATE TRIGGER [trgUpdateProject]
ON [myTable]
FOR INSERT
AS
BEGIN
    SET NOCOUNT ON;

UPDATE m
SET m.[Project] = m.[Host name]
FROM inserted i
JOIN [myTable] m ON i.[FileName] = m.[FileName]
WHERE UPPER(m.[Mfg]) IN (SELECT UPPER([Mfg_ID]) FROM [tblMfg_ID]) 
and m.[Project] IS NULL

END
答案

假设RowID是表的主键

CREATE TRIGGER [trgUpdateProject]
ON [myTable]
FOR INSERT
AS
BEGIN
    SET NOCOUNT ON;

UPDATE m
SET    m.[Project] = n.[Host name]
FROM   inserted i
       INNER JOIN [myTable]   m  ON i.RowID = m.RowID
       INNER JOIN [tblMfg_ID] n  ON m.Mfg   = n.Mfg_ID
WHERE  i.[Project] IS NULL

END
另一答案
CREATE TRIGGER [trgUpdateProject]
ON [myTable]
FOR INSERT
AS
BEGIN
    SET NOCOUNT ON;

    UPDATE m
    SET m.[Project] = m.[Host name]
    FROM [myTable] m 
    --This grabs the MFG ID in a mapping table. If they match, that hostname is the projectname
    WHERE UPPER(m.[Mfg]) IN (SELECT UPPER([Mfg_ID]) 
                             FROM [tblMfg_ID]) 

END
另一答案

请尝试使用以下查询来获得所需的结果。

如果表格如下

create table updproject(
rowid varchar(20) not null unique,
filename varchar(20),
project varchar(20),
hostname varchar(20),
)

使用以下触发器根据主机名更新项目

CREATE TRIGGER [trgUpdateProject]
ON updproject
FOR INSERT,update
AS
BEGIN
SET NOCOUNT ON;
DECLARE  @st1 varchar(5)
SELECT @st1 = SUBSTRING(hostname,CHARINDEX('t',hostname)+1,1) from inserted
UPDATE updproject
SET updproject.Project = 'Host'+@st1
where rowid = (select rowid from inserted) and project is null
END

请尝试在下面的表单中插入一行

 insert into updproject (rowid,filename,hostname) values ('abc123', 'abc1' ,'HostN-012')

输出:

rowid filename project hostname
abc123 abc1    HostN   HostN-012

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

sql server而不是使用插入的变量和值触发插入语句

根据列值返回 SQL Server 列名和对应值

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

根据值和键填充 SQL 中的行

SQL Server:导入 Excel 并在表中放置列名和值

访问 SQL Server 2008 的多个开发应用程序前端