急求一觸發器解決方法,各位大俠幫忙啊!!! 現在要做一觸發器,修改一表(TB_任務)時,另一表(TB_任務史)實現保存修改前的各項數據和修改后的數據,并保存下更新后的數據及修改者,修改機器的IP地址。(原表中的數據都有可能改變,只涉及到添加,修改,沒有刪除的情況)請教各位大俠幫幫忙,小弟高分送上!!

熱心網友

關于觸發器的解決方法,你沒有提到所用語言,所以,沒法幫你解決,下面我用sql server 7。0及NT來舉例說明觸發器的一些知識點。希望能對你有所啟發在一個共享數據庫表中,我們往往需要給用戶自由地在表中添加記錄(發布信息)、維護自己所發布的信息(更新和刪除所添加的記錄),同時也要避免用戶更改或刪除別人發布的記錄。在SQL SERVER等大型數據庫系統中,通過把數據庫表、視圖的UPDATE、DELETE等權限分配給指定的用戶,可以使得他們對表或視圖中的記錄執行更新和刪除操作,但是不能達到只有記錄的創建者才能更新和刪除記錄的目的。本文介紹如何利用觸發器來控制表XINXI中記錄的更新和刪除,實現只有記錄創建者才能更新和刪除記錄的功能。 本文代碼在SQL SERVER 7。0,WINDOWS NT SERVER 4。0 SP4下執行通過。 表XINXI結構如下: create table xinxi (rtitle char(50) null ,rnote text null,ruserid int null) 其中RUSERID字段用來保存創建記錄的用戶的用戶ID。 1、用戶的識別 在SQL SERVRE數據庫系統中,每個用戶都有不同的用戶ID——USER ID,就算是某用戶先刪除然后再重新創建(同名)其USER ID也不相同,因此USERID可以作為一個用戶的識別標志。我們可以通過系統函數USER_ID(USER)獲得用戶的USERID。 2、設計INSERT觸發器實現用戶USERID的自動保存 為了實現表XINXI的RUSERID字段能自動保存記錄創建者的USERID,并且不給記錄創建者為該字段賦值,我們為表XINXI創建INSERT觸發器XINXI_INSERT。當一個新的記錄插入XINXI表時,XINXI_INSERT觸發器自動地執行,把插入記錄的RUSERID字段值更新為當前用戶的USERID,不論用戶在插入記錄時是否提供RUSERID字段的值。比如某用戶的USERID是5,他執行下列兩個插入命令: 插入命令1: insert into xinxi (rtitle,rnote,ruserid) values ('hello','good',1) 插入命令2: insert into xinxi (rtitle,rnote) values ('hello','good') 其結果都是在表XINXI中插入如下記錄,盡管命令1中用戶給RUSERID賦值為1: RTITLE RNOTE RUSERID Hello good 5 XINXI_INSERT觸發器代碼如下: create trigger xinxi_insert on xinxi for insert as declare @userid int --獲得當前用戶的USERID set @userid=user_id(user) --更新當前記錄的RUSERID字段 --INSERTED表是一個邏輯的表,它包含了當前插入到XINXI表中的記錄 update xinxi set ruserid=@userid where xinxi。rid=(select rid from inserted) 3、設計UPDATE觸發器控制用戶對記錄的更新操作 為了控制用戶對記錄的UPDATE操作,我們為XINXI表設計UPDATE觸發器XINXI_UPDATE,當用戶對XINXI中的記錄作更新(UPDATE)操作時,觸發器XINXI_UPDATE被自動執行,在XINXI_UPDATE中通過比較被更新記錄中的RUSERID是否與執行更新操作用戶的USERID相同來決定更新操作是能完成或被取消,這樣實現只有記錄的創建者才能更新記錄。 定義XINXI_UPDATE觸發器的代碼如下: create trigger xinxi_update on xinxi for update as declare @userid int --獲得當前用戶的USERID set @userid=user_id(user) --判定是否所有被更新記錄的RUSERID字段的值都是當前用戶的USERID --如果不是,則不能更新 --DELETED表是一個邏輯的表,它包含當前被更新的記錄 if (select count(ruserid) from deleted where ruserid=@userid)(select count(ruserid) from deleted) begin raiserror('包含有不是有當前用戶創建的記錄,不能更新記錄',10,1) --事務回滾,取消更新操作,恢復更新前的狀態 rollback transaction end 4、設計DELETE觸發器控制用戶對記錄的刪除操作 為控制用戶僅能刪除自己錄入的記錄,我們為XINXI表設計了DELETE觸發器XINXI_DELETE,當用戶刪除XINXI表中的記錄時XINXI_DELETE觸發器被自動執行。在XINXI_DELETE中我們加入了判斷執行刪除操作用戶的USERID與被刪除記錄的RUSERID是否相同,如果不相同則取消刪除操作,從而實現控制用戶僅能刪除自己錄入的記錄。 create trigger xinxi_delete on xinxi for delete as declare @userid int --獲得用戶的USERID set @userid=user_id(user) --判斷是否所有被刪除記錄的RUSERID字段值都是當前用戶的USERID --DELETED表是一個邏輯的表,它包含當前被刪除的記錄 if (select count(ruserid) from deleted where ruserid=@userid)(select count(ruserid) from deleted) begin raiserror ('不能刪除當前記錄',16,1) --事務回滾,取消刪除操作,恢復原來的記錄 rollback tran end 。

熱心網友

create trigger xinxi_delete on xinxi for delete as declare @userid int --獲得用戶的USERID set @userid=user_id(user) --判斷是否所有被刪除記錄的RUSERID字段值都是當前用戶的USERID --DELETED表是一個邏輯的表,它包含當前被刪除的記錄 if (select count(ruserid) from deleted where ruserid=@userid)(select count(ruserid) from deleted) begin