對象 'dbo.xxx' 不存在,或對此操作無效。爲表創建觸發器,爲什麼提示對象不存在?

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章