搜索触发器SQL的说明

时间:2017-09-07 17:27:08

标签: sql-server sql-server-2008

我有下面的触发器,并试图了解它应该做什么。我不是dba,但我想了解下面的剧本。

这是否意味着每次IT01_Incorporates表发生更新(插入,删除,更新)时,DateUpdated列都会使用当前日期更新? 我实际上想知道,通过应用下面的触发器,DateUpdated列什么时候应该更新?插入,删除和更新?

我也想理解:set nocount on。

的含义

非常感谢

DateUpdated列是日期时间类型

CREATE trigger [dbo].[TR_IT01_Update] 
on [dbo].[IT01_Incorporates]
for update
as
set nocount on
begin

    update  IT01_Incorporates
    set DateUpdated = getdate()
    where   exists (
    select  1 from inserted where incorpuid = IT01_Incorporates.incorpuid
    )

end 

2 个答案:

答案 0 :(得分:2)

如果您查看脚本,您将在标题行中看到条款for update。这表示它仅用于更新。

要进行插入和更新,您必须将其更改为for insert, update。您也可以添加, delete以使其在DELETE上触发,但触发器在这种情况下不起作用,因为不再有任何记录要更新。

答案 1 :(得分:1)

让我们说一年前在.NET程序中添加了以下SQL语句:

UPDATE IT01_Incorporates set field1=@Field1, field2=@Field2, Field3=@Field3 where id=@id

让我们说你的一位DBA同事昨天更改了表格如下:

ALTER TABLE IT01_Incorporates ADD DateUpdated datetime

而不是修改代码;他/她可以创建一个触发器作为临时措施,以确保每次更新时都更新DateUpdated。