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

问题描述 投票:0回答:3

我需要创建一个触发器来帮助我填写项目名称列的其余部分。项目名称来自我的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
sql sql-server triggers sql-update
3个回答
1
投票

假设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

0
投票
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

0
投票

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

如果表格如下

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
© www.soinside.com 2019 - 2024. All rights reserved.