SQL Server触发器根据上面的文件名和值填充Null值
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL Server触发器根据上面的文件名和值填充Null值相关的知识,希望对你有一定的参考价值。
我需要创建一个触发器来帮助我填写项目名称列的其余部分。项目名称来自我的Hostname列,但是我可能在导入时有多组Hostnames。我当前的触发器允许我填写我的项目列,如下所示:
当前触发结果:
我需要更新我的触发器,以便填充其余的空值,并使用相应的主机名填充项目名称。
期望的触发结果:
我需要这个触发器动态工作,因此它将在导入时填充任意数量的行和项目。我还想使用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值的主要内容,如果未能解决你的问题,请参考以下文章