Sql server Sql CretedDate触发器
这是我用来创建触发器以更新表“网站”的Sql server Sql CretedDate触发器,sql-server,tsql,database-trigger,Sql Server,Tsql,Database Trigger,这是我用来创建触发器以更新表“网站”的CreatedDate列的查询 它工作了,只有一个应该用创建的日期更新(实际上,预期的行已更新)。但结果我明白了 “行已更新” 为什么?为此,您应该在CreatedDate上使用默认约束,而不是触发器 alter table dbo.websites add constraint df_websites_CreatedDate default getdate() for CreatedDate; 触发器未在唯一id上联接,如果是,则每次插入仅会看到1行受
CreatedDate
列的查询
它工作了,只有一个应该用创建的日期更新(实际上,预期的行已更新)。但结果我明白了
“行已更新”
为什么?为此,您应该在
CreatedDate
上使用默认约束,而不是触发器
alter table dbo.websites add constraint df_websites_CreatedDate default getdate() for CreatedDate;
触发器未在唯一id上联接,如果是,则每次插入仅会看到1行受影响。您还应该使用
set nocount on
以防止返回额外的行结果消息,但在本例中,最好不要设置它,以便您注意到错误
alter trigger [dbo].[trgrforcreateddate] on [dbo].[Websites]
after insert
as
begin;
set nocount on;
update w
set w.CreatedDate=getdate()
from dbo.websites w
inner join inserted i
on w.id = i.id;
end;
因此,在insert之后,“更新了15行”(第15行是新插入的行),您将使用getdate()更新日期列。为什么不在该列上使用默认的getdate(),而不是使用触发器呢?表
网站的主键是什么?列“Website”是主键。如果将“update dbo.Websites”更改为“update w”,它会改变什么吗?没关系。我知道。我想问的是,触发器的定义是否正确?问题可能是您的网站列值不是唯一的。但是这个答案可以解决你的问题,也可以解决不正确的表格设计。我只是在练习。。刚刚学习了触发器的概念并将其应用于表:)
alter trigger [dbo].[trgrforcreateddate] on [dbo].[Websites]
after insert
as
begin;
set nocount on;
update w
set w.CreatedDate=getdate()
from dbo.websites w
inner join inserted i
on w.id = i.id;
end;