1报错:分析成功,但执行错误,提示:消息 8197,级别 16,状态 4,过程 trg_readerinfo_del,第 1 行对象 ‘dbo.readerinfo’ 不存在,或对此操作无效。
表readerinfo是存在的,在管理器那看到dbo.readerinfo是存在的
分析:
1是否开头加上 use 数据库名 语句 并且 go语句隔开,否则提示
2如果go隔开后,仍然失败,查看新建查询语句的位置是否有误?方法:select * from 数据表名,如果报错,说明新建查询有问题,重新新建查询语句
3再次尝试发现成功创建触发器!
例子:删除新闻类别时同时删除类别下的所有新闻,新闻下的所有评论
alter TRIGGER trig_CategoryDelete
ON category
instead of DELETE
AS
BEGIN
declare @caid int
select @caid=id from deleted
–删除评论
delete comment where newsID in (select id from news where caid=@caid )
–删除新闻
delete news where caid=@caid
–删除类别
delete category where id=@caid
END
GO
ps1:
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表有数据(旧数据)
应用实例:
代码
Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
-- =============================================
-- 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
TIPS
触发器里,插入数据或者更新的数据,都被放在inserted这张表里,所以,你只要在触发器里查询这张表,而删除或者被更新的数据都被放在deleted这张表里
decare @ID
select @ID=id from inserted
–上面这句是查询修改后的ID
select @ID=id from deleted
–上面这句是查询修改前的ID
select @ID
转载:https://blog.csdn.net/qq_42837890/article/details/105346814