Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server Sql CretedDate触发器_Sql Server_Tsql_Database Trigger - Fatal编程技术网

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;