【发布时间】:2021-06-15 14:38:29
【问题描述】:
当使用触发器使用新行更新表时,我正在尝试根据特定条件填充列。
这是我写的。
create trigger [myschema].[charD]
on [myschema].[deposits]
after update
as
begin
set nocount on;
update myschema.deposits
set dayC = (convert(varchar, day, 23))
from myschema.deposits
where dayC is null
end
GO
当添加新行时,这不会更新或填充列 dayC,我在这里缺少什么?
【问题讨论】:
-
因为你有
after update而不是after insert。此外,您应该从不在不指定长度的情况下使用varchar,例如varchar(64)(但使用适合您的应用程序的任何值)。 -
谢谢你戴尔,我会试试你的建议
-
inserted表怎么了,你不用吗?请记住,触发器触发一次每个语句而不是每行一次,因此inserted可以有多行 -
我以这种方式更新了代码
create trigger [myschema].[charD] on [myschema].[deposits] after insert as begin set nocount on; update myschema.deposits set dayC = (convert(varchar, a.day, 23)) from myschema.deposits a left join inserted i on a.id=i.id and a.test=i.test and a.day=i.day where i.dayC is null end go
标签: sql-server tsql triggers