阅读全文并下载代码:http://www.sufeinet.com/thread-264-1-1.html
create
trigger
updateDeleteTime
on
user
for
update
as
begin
update
user
set
UpdateTime
=
(
getdate
())
from
user
inner
join
inserted
on
user
.UID
=
Inserted.UID
end
上面的例子是在执行更新操作的时候同时更新,一下修改时间。
关键在于Inserted表
触发器语句中使用了两种特殊的表:deleted 表和 inserted 表。
Deleted 表用于存储 DELETE 和 UPDATE 语句所影响的行的复本。在执行 DELETE 或 UPDATE 语句时,行从触发器表中删除,并传输到 deleted 表中。Deleted 表和触发器表通常没有相同的行。
Inserted 表用于存储 INSERT 和 UPDATE 语句所影响的行的副本。在一个插入或更新事务处理中,新建行被同时添加到 inserted 表和触发器表中。Inserted 表中的行是触发器表中新行的副本。
1.插入操作(Insert)
Inserted表有数据,Deleted表无数据
2.删除操作(Delete)
Inserted表无数据,Deleted表有数据
3.更新操作(Update)
Inserted表有数据(新数据),Deleted表有数据(旧数据)
应用实例
代码
set
ANSI_NULLS
ON
set
QUOTED_IDENTIFIER
ON
go
--
=============================================
--
Author: <Author,sufei>
--
Create date: <Create Date,2010-05-11>
--
Description: <当是短信充值时修改相信的记录使记录不会重复获取>
--
=============================================
ALTER
TRIGGER
[
dbo
]
.
[
updatestart
]
ON
[
dbo
]
.
[
OrderTelecom
]
FOR
update
AS
BEGIN
DECLARE
@state
int
;
DECLARE
@note2
varchar
(
50
)
SELECT
@state
=
Inserted.ortState,
@note2
=
Inserted.ortNote2
from
Inserted
IF
@state
=
1
AND
@note2
=
1
begin
--
当发短信猫取走记录时修改状态为成功和取过的状态
update
OrderTelecom
set
OrderTelecom.ortState
=
2
,OrderTelecom.ortSmsmessages
=
'
短信充值成功
'
from
OrderTelecom
inner
join
Inserted
on
OrderTelecom.ortId
=
Inserted.ortId
end
if
@state
in
(
2
,
3
,
10
)
and
@note2
=
0
begin
update
OrderTelecom
set
ortNote2
=
1
from
OrderTelecom
inner
join
Inserted
on
OrderTelecom.ortId
=
Inserted.ortId
end
END