SQL Server触发器根据上述文件名和值填充空值
我需要创建一个触发器来帮助我填写项目名称列的其余部分。项目名称来自“我的主机名”列,但在导入时可能有多组主机名。我的当前触发器允许我填写项目栏,如下所示: 当前触发结果: 我需要更新触发器,以便它填充其余的空值,并用相应的主机名填充项目名称 期望的触发结果: 我需要这个触发器动态工作,所以它将在导入时填充任意数量的行和项目。我还想使用文件名作为更新的标准,这样它就不会意外地更新任何其他导入的数据集 当前触发代码:SQL Server触发器根据上述文件名和值填充空值,sql,sql-server,triggers,sql-update,Sql,Sql Server,Triggers,Sql Update,我需要创建一个触发器来帮助我填写项目名称列的其余部分。项目名称来自“我的主机名”列,但在导入时可能有多组主机名。我的当前触发器允许我填写项目栏,如下所示: 当前触发结果: 我需要更新触发器,以便它填充其余的空值,并用相应的主机名填充项目名称 期望的触发结果: 我需要这个触发器动态工作,所以它将在导入时填充任意数量的行和项目。我还想使用文件名作为更新的标准,这样它就不会意外地更新任何其他导入的数据集 当前触发代码: 这是我的当前触发器,它允许我获取项目名称 CREATE TRIGGER [tr
这是我的当前触发器,它允许我获取项目名称
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 table updproject(
rowid varchar(20) not null unique,
filename varchar(20),
project varchar(20),
hostname varchar(20),
)
insert into updproject (rowid,filename,hostname) values ('abc123', 'abc1' ,'HostN-012')
使用下面的触发器根据主机名更新项目
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
请尝试在下表中插入一行
create table updproject(
rowid varchar(20) not null unique,
filename varchar(20),
project varchar(20),
hostname varchar(20),
)
insert into updproject (rowid,filename,hostname) values ('abc123', 'abc1' ,'HostN-012')
输出:
rowid filename project hostname
abc123 abc1 HostN HostN-012
你能给我们看看你现在的扳机吗?当然可以。只需补充一点,您可以向我们显示
m.[Mfg]
的数据,并从[tblMfg_ID]中选择上限([Mfg_ID])?首先,“上面的值”注释需要一个正确的排序表达式-顺序ID,或日期/时间或其他可以排序数据的东西,以便您可以拥有“上面的值”(或上一个/下一个值)第二:你没有使用触发器中的Inserted
伪表,它保存了新插入的行-你总是更新整个表,这在一段时间后会非常慢。不幸的是,其中一些数据是敏感的,这就是为什么我没有包含任何数据的原因。基本上,这是一个已知制造商的映射与用于项目名称的主机名相对应的URER。如果[project]为空,则将执行查询(更新),否则它不会更新,因此我删除了“project为空”命令。我发布的触发器代码用于当前使用的触发器,用相应的主机名填充项目名称。我的问题是用正确的项目名称填充空值。类似的操作可能会起作用。我明天将测试它。感谢加入mfg,它将生成与项目所在行相同的行已在WHERE
子句中填写,将排除我感谢您的努力,但示例中提供的主机名只是一个占位符。主机名可以命名为任何名称,但不总是指定一定数量的字符。感谢您的更新。主机名列中是否会有类似%Host%的字符串?