SQL Server數據庫--觸發器


觸發器-針對於表添加、刪除、修改(觸發)
對某張表進行添加動作,觸發動作,向另外一張表添加一條操作記錄


觸發器:兩種

觸發器-有約束的

觸發器-不帶約束

 

 


 

 

insert/delete/update 這三種操作數據庫實際上只有插入和刪除兩種,我們在對數據庫做修改操作的時候,其實系統是把新數據放到了系統的臨時表,刪除了當前數據后,把系統臨時表里的那條數據新增到了數據庫中!

系統臨時表 inserted(添加記錄,新數據) deleted(刪除記錄,舊數據)

 


 

創建觸發器

功能:如果對“產品表”進行增、刪、改操作,所有操作都會寫進 Log 表里

 

create trigger tri_ProductLog --創建觸發器
on Product --從產品表創建
for insert,update,delete --after  instead of(可以刪除帶約束的表) 
as 
begin
    --相當於事務
    --假如添加
    declare @userid int --操作人
    declare @action varchar(50) --動作(添加、刪除、修改)
    declare @count int=0 --統計數據記錄
    if exists(select top 1 * from deleted)--判斷是否刪除動作(他這里判斷的依據是根據:“系統臨時表”的inserted【添加記錄,新數據】表和deleted【刪除記錄,舊數據】表)
    begin
        select @userid=CreateUserId from deleted
        set @action='刪除'
        set @count=@count+1
    end
    
    if exists(select top 1 * from inserted) --判斷是否添加動作
    begin
        select @userid=CreateUserId from inserted
        set @action='添加'
        set @count=@count+1
    end

    if @count=2 --判斷是否是修改動作(因為是修改動作的話,上面2個if都會被執行,所以此時@count變量是2)
    begin
        select @userid=CreateUserId from deleted
        set @action='修改'
    end

    insert into Logs(logContent, CreateUserId)
    values('對產品表做了'+@action+'動作',@userid)

end

 

 

測試上面觸發器的代碼

insert into Product(ProductNo,ProductName, Price,TypeId, CreateUserId)
values(1003,'測試產品01',5000,1,10000)

 

delete from Product
where ProductNo=1003

 

delete ProductType
where typeid=1

 


 

修改觸發器

功能:如果刪除“產品分類”,那么這條分類下的所有產品都會被刪除!

--create
alter trigger tri_Del_ProductType
on ProductType
instead of delete 
as
begin
    declare @typeid int
    select @typeid=typeid from deleted
    print @typeid
    delete from Product where TypeId=@typeid
end

 

測試代碼

delete ProductType
where typeid=1

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM