版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、 觸發(fā)器是一種特殊類型的存儲過程,觸發(fā)器是一種特殊類型的存儲過程,它在用戶使用它在用戶使用UPDATEUPDATE、INSERTINSERT和和DELETEDELETE語句修改關系中的數據時觸發(fā)執(zhí)行。語句修改關系中的數據時觸發(fā)執(zhí)行。第第1313章章 觸發(fā)器原理及使用觸發(fā)器原理及使用 113.1 觸發(fā)器基本概念觸發(fā)器基本概念13.2 觸發(fā)器原理觸發(fā)器原理13.3 觸發(fā)器的創(chuàng)建和管理觸發(fā)器的創(chuàng)建和管理13.4 使用觸發(fā)器實現(xiàn)強制業(yè)務規(guī)則使用觸發(fā)器實現(xiàn)強制業(yè)務規(guī)則13.5 使用觸發(fā)器的使用觸發(fā)器的T-SQL限制限制13.6 觸發(fā)器應用實例分析觸發(fā)器應用實例分析213.1 13.1 觸發(fā)器基本概念觸發(fā)
2、器基本概念 13.1.1 13.1.1 觸發(fā)器的概念及作用觸發(fā)器的概念及作用觸發(fā)器可以看作是一類特殊的存儲過程,它在滿足某個特定觸發(fā)器可以看作是一類特殊的存儲過程,它在滿足某個特定條件時自動觸發(fā)執(zhí)行。條件時自動觸發(fā)執(zhí)行。 觸發(fā)器是為表上的更新、插入、刪除操作觸發(fā)器是為表上的更新、插入、刪除操作定義的,也就是說當表上發(fā)生更新、插入或刪除操作時觸發(fā)器將定義的,也就是說當表上發(fā)生更新、插入或刪除操作時觸發(fā)器將執(zhí)行。存儲過程和觸發(fā)器同是提高數據庫服務器性能的有力工具。執(zhí)行。存儲過程和觸發(fā)器同是提高數據庫服務器性能的有力工具。觸發(fā)器作為一種特殊類型的存儲過程,它不同于我們前面介觸發(fā)器作為一種特殊類型的存
3、儲過程,它不同于我們前面介紹過的存儲過程。觸發(fā)器主要是通過事件進行觸發(fā)而被執(zhí)行的,紹過的存儲過程。觸發(fā)器主要是通過事件進行觸發(fā)而被執(zhí)行的,而存儲過程可以通過存儲過程名字而被直接調用。當對某一表進而存儲過程可以通過存儲過程名字而被直接調用。當對某一表進行諸如行諸如UPDATE、INSERT、DELETE這些操作時,這些操作時,SQL Server就會自動執(zhí)行觸發(fā)器所定義的就會自動執(zhí)行觸發(fā)器所定義的SQL語句,從而確保對數據的處理語句,從而確保對數據的處理必須符合由這些必須符合由這些SQL語句所定義的規(guī)則。語句所定義的規(guī)則。 3觸發(fā)器還有其它許多不同的功能:觸發(fā)器還有其它許多不同的功能:(1)強化
4、約束()強化約束(Enforce restriction)觸發(fā)器可以偵測數據庫內的操作,從而不允許數據庫中未經許觸發(fā)器可以偵測數據庫內的操作,從而不允許數據庫中未經許可的更新和變化??傻母潞妥兓?。(2)級聯(lián)運行()級聯(lián)運行(Cascaded Operation)觸發(fā)器可以偵測數據庫內的操作,并自動地級聯(lián)影響整個數據觸發(fā)器可以偵測數據庫內的操作,并自動地級聯(lián)影響整個數據庫的各項內容。例如,某個表上的觸發(fā)器包含對另外一個表的庫的各項內容。例如,某個表上的觸發(fā)器包含對另外一個表的數據操作(如刪除、更新、插入),而該操作又導致該表上的數據操作(如刪除、更新、插入),而該操作又導致該表上的觸發(fā)器被觸發(fā)
5、。觸發(fā)器被觸發(fā)。(3)存儲過程的調用()存儲過程的調用(Stored Procedure Invocation)為了響應)為了響應數據庫更新,觸發(fā)器可以調用一個或多個存儲過程,甚至可以數據庫更新,觸發(fā)器可以調用一個或多個存儲過程,甚至可以通過外部過程的調用而在通過外部過程的調用而在DBMS之外進行操作。之外進行操作。4 13.1.2 13.1.2 觸發(fā)器的種類觸發(fā)器的種類 SQL Server 2000支持兩種類型的觸發(fā)器:支持兩種類型的觸發(fā)器:AFTER觸發(fā)器和觸發(fā)器和INSTEAD OF觸發(fā)器。觸發(fā)器。 (1)AFTER觸發(fā)器觸發(fā)器 即為即為SQL Server 2000版本以前所介紹的觸
6、發(fā)器。該類型觸發(fā)器要版本以前所介紹的觸發(fā)器。該類型觸發(fā)器要求只有執(zhí)行完某一操作(求只有執(zhí)行完某一操作(INSERT、UPDATE、DELETE),并),并處理過所有約束后,觸發(fā)器才被觸發(fā),且只能在表上定義。如果處理過所有約束后,觸發(fā)器才被觸發(fā),且只能在表上定義。如果操作違反約束條件,將導致事務回滾,這時就不會執(zhí)行后觸發(fā)器。操作違反約束條件,將導致事務回滾,這時就不會執(zhí)行后觸發(fā)器。513.1.2 13.1.2 觸發(fā)器的種類觸發(fā)器的種類 (2)INSTEAD OF觸發(fā)器觸發(fā)器 該類觸發(fā)器表示并不執(zhí)行其所定義的操作(該類觸發(fā)器表示并不執(zhí)行其所定義的操作(INSERT、UPDATE、DELETE),而
7、僅是執(zhí)行觸發(fā)器本身。既可在表上定義),而僅是執(zhí)行觸發(fā)器本身。既可在表上定義INSTEAD OF觸發(fā)器,也可以在視圖上定義觸發(fā)器,也可以在視圖上定義INSTEAD OF觸發(fā)器,觸發(fā)器,但對同一操作只能定義一個但對同一操作只能定義一個INSTEAD OF觸發(fā)器。觸發(fā)器。613.2 13.2 觸發(fā)器原理觸發(fā)器原理 從以上的介紹中我們可以已了解到觸發(fā)器具有強大從以上的介紹中我們可以已了解到觸發(fā)器具有強大的功能,那么的功能,那么MS SQL Server 是如何使得觸發(fā)器能夠感是如何使得觸發(fā)器能夠感知數據庫數據的變化、維護數據庫參照完整性及比知數據庫數據的變化、維護數據庫參照完整性及比CHECK約束更復
8、雜的約束呢?下面我們將對其工作原約束更復雜的約束呢?下面我們將對其工作原理及實現(xiàn)做較為詳細的介紹,以便大家學習創(chuàng)建、理解理及實現(xiàn)做較為詳細的介紹,以便大家學習創(chuàng)建、理解和使用各種類型的觸發(fā)器,完成各種任務。和使用各種類型的觸發(fā)器,完成各種任務。713.2.1 13.2.1 插入表的功能插入表的功能對一個定義了插入類型觸發(fā)器的表來講,一對一個定義了插入類型觸發(fā)器的表來講,一旦對該表執(zhí)行了插入(旦對該表執(zhí)行了插入(INSERT)操作,那么對該)操作,那么對該表插入的所有行來說,都有一個相應的副本級存表插入的所有行來說,都有一個相應的副本級存放到插入表(放到插入表(inserted)中,即插入表就是
9、用來存)中,即插入表就是用來存儲原表插入的新數據行。儲原表插入的新數據行。813.2.2 13.2.2 刪除表的功能刪除表的功能 對一個定義了刪除類型觸發(fā)器的表來講,一旦對該對一個定義了刪除類型觸發(fā)器的表來講,一旦對該表執(zhí)行了刪除(表執(zhí)行了刪除(DELETE)操作,則將所有的被刪)操作,則將所有的被刪除的行存放至刪除表(除的行存放至刪除表(deleted表)中。這樣做的目表)中。這樣做的目的是,一旦觸發(fā)器遇到了強迫它中止的語句被執(zhí)行的是,一旦觸發(fā)器遇到了強迫它中止的語句被執(zhí)行時,刪除的那些行可以從刪除表(時,刪除的那些行可以從刪除表(deleted表)中得表)中得以還原。以還原。 9更新(UP
10、DATE)操作 需要強調的是,更新(需要強調的是,更新(UPDATE)操作包括兩個)操作包括兩個部分,即先將舊的內容刪除,然后將新值插入。部分,即先將舊的內容刪除,然后將新值插入。因此,對一個定義了更新類型觸發(fā)器的表來講,因此,對一個定義了更新類型觸發(fā)器的表來講,當執(zhí)行更新操作時,在刪除表中存放了修改之前當執(zhí)行更新操作時,在刪除表中存放了修改之前的舊值,然后在插入表中存放的是修改之后的新的舊值,然后在插入表中存放的是修改之后的新值。值。1013.2.3 13.2.3 插入視圖和刪除視圖插入視圖和刪除視圖 當在定義了觸發(fā)器的表上發(fā)生修改操作時會自當在定義了觸發(fā)器的表上發(fā)生修改操作時會自動派生出兩
11、個視圖,一個是插入視圖,一個是刪除視動派生出兩個視圖,一個是插入視圖,一個是刪除視圖。當在表上發(fā)生插入操作時,新插入的行將出現(xiàn)在圖。當在表上發(fā)生插入操作時,新插入的行將出現(xiàn)在inserted表中形成插入視圖;當在表上發(fā)生刪除操作表中形成插入視圖;當在表上發(fā)生刪除操作時,被刪除的舊行將出現(xiàn)時,被刪除的舊行將出現(xiàn)deleted表中,形成刪除視圖。表中,形成刪除視圖。而更新的實現(xiàn)過程是先刪除舊行,然后再插入新行。而更新的實現(xiàn)過程是先刪除舊行,然后再插入新行。1113.3.1 13.3.1 創(chuàng)建觸發(fā)器創(chuàng)建觸發(fā)器 上面介紹了有關觸發(fā)器的概念、作用和工作上面介紹了有關觸發(fā)器的概念、作用和工作原理,下面我們
12、將分別介紹在原理,下面我們將分別介紹在MS SQLServer 中如中如何用何用SQL Server管理工具管理工具Enterprise Manager和和Transaction_SQL來創(chuàng)建觸發(fā)器。來創(chuàng)建觸發(fā)器。13.3 13.3 觸發(fā)器的創(chuàng)建和管理觸發(fā)器的創(chuàng)建和管理121用對象資源管理器創(chuàng)建觸發(fā)器用對象資源管理器創(chuàng)建觸發(fā)器步驟如下:步驟如下: 啟動對象資源管理器,登錄到要使用的服務器。啟動對象資源管理器,登錄到要使用的服務器。 在對象資源管理器的左窗格中,展開要創(chuàng)建觸發(fā)器的數據庫文在對象資源管理器的左窗格中,展開要創(chuàng)建觸發(fā)器的數據庫文件夾,單擊件夾,單擊“表表”文件夾前面的文件夾前面的“+
13、”號,此時在右窗格中顯號,此時在右窗格中顯示該數據庫的所有表。示該數據庫的所有表。 選擇創(chuàng)建觸發(fā)器的表,單擊要創(chuàng)建觸發(fā)器的數據表前面的選擇創(chuàng)建觸發(fā)器的表,單擊要創(chuàng)建觸發(fā)器的數據表前面的“+”號,右擊觸發(fā)器選項,在出現(xiàn)的下一級子菜單中選擇號,右擊觸發(fā)器選項,在出現(xiàn)的下一級子菜單中選擇“新建觸新建觸發(fā)器發(fā)器”菜單項。菜單項。 132 2用用CREATE TRIGGERCREATE TRIGGER命令創(chuàng)建觸發(fā)器命令創(chuàng)建觸發(fā)器語法格式:語法格式: CREATE TRIGGER trigger_name ON table | view WITH ENCRYPTION FOR | AFTER | INST
14、EAD OF INSERT , UPDATE WITH APPEND NOT FOR REPLICATION 14AS IF UPDATE ( column ) AND | OR UPDATE ( column ) .n | IF ( COLUMNS_UPDATED ( ) bitwise_operator updated_bitmask ) comparison_operator column_bitmask .n Sql 語句語句 .n 15【例13-1】創(chuàng)建一個觸發(fā)器,當向STUDENT表中插入一條學生記錄時,自動顯示該表中的記錄。USE 教學管理GOCREATE TRIGGER T_學
15、生表改變顯示 On 學生表FOR INSERTASBEGINIF (COLUMNS_UPDATED()&1=1) SELECT * FROM 學生表END-驗證 BEGIN TRANSACTIONINSERT INTO 學生表VALUES(S090103, *19971021*, 李飛, 男, 130*12, 溫州, 計算機, 信電學院, 160)ROLLBACK TRANSACTION 該觸發(fā)器建立完畢后,當對學生表的插入操作執(zhí)行成功時,將會顯示學生表中的全部記錄。1613.3.2 13.3.2 管理觸發(fā)器管理觸發(fā)器1使用對象資源管理器顯示觸發(fā)器信息使用對象資源管理器顯示觸發(fā)器信息步
16、驟如下。步驟如下。(1)啟動對象資源管理器,登錄到要使用的服務器。)啟動對象資源管理器,登錄到要使用的服務器。 (2)在對象資源管理器的左窗格中,展開要創(chuàng)建觸)在對象資源管理器的左窗格中,展開要創(chuàng)建觸發(fā)器的數據庫文件夾,單擊發(fā)器的數據庫文件夾,單擊“表表”文件夾前面的文件夾前面的“+”號,在下面顯示該數據庫的所有表。號,在下面顯示該數據庫的所有表。 (3)單擊要修改觸發(fā)器的數據表前面的)單擊要修改觸發(fā)器的數據表前面的“+”號,出號,出現(xiàn)觸發(fā)器選項,再單擊觸發(fā)器前面的現(xiàn)觸發(fā)器選項,再單擊觸發(fā)器前面的“+”號,下面號,下面顯示該表上建立的所有觸發(fā)器,將鼠標指向要修改的顯示該表上建立的所有觸發(fā)器,將
17、鼠標指向要修改的觸發(fā)器,單擊右鍵,在出現(xiàn)的下一級子菜單中選擇觸發(fā)器,單擊右鍵,在出現(xiàn)的下一級子菜單中選擇“修改修改”菜單項,就會出現(xiàn)修改該觸發(fā)器的文本框菜單項,就會出現(xiàn)修改該觸發(fā)器的文本框.172使用系統(tǒng)存儲過程查看觸發(fā)器使用系統(tǒng)存儲過程查看觸發(fā)器(1)sp_help通過該系統(tǒng)過程,可以了解觸發(fā)器的一般信息,如觸發(fā)通過該系統(tǒng)過程,可以了解觸發(fā)器的一般信息,如觸發(fā)器的名字、屬性、類型、創(chuàng)建時間。使用器的名字、屬性、類型、創(chuàng)建時間。使用sp_help系系統(tǒng)過程的命令格式為:統(tǒng)過程的命令格式為: sp_help 觸發(fā)器名字觸發(fā)器名字【例【例13-2】查看我們已經建立的】查看我們已經建立的“T_表改變
18、顯示表改變顯示”觸發(fā)器。觸發(fā)器。 sp_help T_表改變顯示表改變顯示 18(2)sp_helptext通過通過sp_helptext查看觸發(fā)器的正文信息,其語法格式為:查看觸發(fā)器的正文信息,其語法格式為: sp_helptext 觸發(fā)器名觸發(fā)器名【例【例13-3】查看我們已經建立的】查看我們已經建立的chang_display觸發(fā)器的觸發(fā)器的命令文本。命令文本。 sp_helptext T_表改變顯示表改變顯示 (3)sp_depends通過通過sp_depends查看指定觸發(fā)器所引用的表或指定的表查看指定觸發(fā)器所引用的表或指定的表所涉及到的所有觸發(fā)器。其語法形式如下:所涉及到的所有觸發(fā)
19、器。其語法形式如下: sp_depends 觸發(fā)器名字觸發(fā)器名字 sp_depends 表名表名【例【例13-4】查看】查看T_表改變顯示表改變顯示觸發(fā)器所涉及的表。觸發(fā)器所涉及的表。 sp_depends T_表改變顯示表改變顯示 2使用系統(tǒng)存儲過程查看觸發(fā)器使用系統(tǒng)存儲過程查看觸發(fā)器1913.3.3 13.3.3 修改、刪除觸發(fā)器修改、刪除觸發(fā)器1修改觸發(fā)器修改觸發(fā)器(1)使用)使用sp_rename命令,修改觸發(fā)器的名字命令,修改觸發(fā)器的名字sp_rename命令的語法格式為:命令的語法格式為:sp_rename oldname, newname20(2)使用)使用Alert trigg
20、er,修改觸發(fā)器的正文,修改觸發(fā)器的正文 語法格式:語法格式: ALTER TRIGGER trigger_name ON table | view WITH ENCRYPTION FOR | AFTER | INSTEAD OF INSERT , UPDATE WITH APPEND NOT FOR REPLICATION AS IF UPDATE ( column ) AND | OR UPDATE ( column ) .n | IF ( COLUMNS_UPDATED ( ) bitwise_operator updated_bitmask ) comparison_operator
21、column_bitmask .n Sql 語句語句 .n 21語法格式:語法格式:DROP TRIGGER trigger_name ,.n 【例【例13-5】除去】除去“T_表改變顯示表改變顯示”觸發(fā)器。觸發(fā)器。USE 教學管理教學管理GOIF EXISTS (SELECT name FROM sysobjects WHERE name =T_表改變顯示表改變顯示 AND type = TR) DROP TRIGGER T_表改變顯示表改變顯示GO2刪除觸發(fā)器刪除觸發(fā)器2213.4 13.4 使用觸發(fā)器實現(xiàn)強制業(yè)務規(guī)則使用觸發(fā)器實現(xiàn)強制業(yè)務規(guī)則13.4.1 INSERT13.4.1 INS
22、ERT觸發(fā)器觸發(fā)器 INSERTINSERT出發(fā)器當向表中添加記錄時觸發(fā),為了維出發(fā)器當向表中添加記錄時觸發(fā),為了維護數據完整性,當表中添加了新的記錄后,應該對其關護數據完整性,當表中添加了新的記錄后,應該對其關聯(lián)表的數據進行調整,以實時反應數據的變化。例如當聯(lián)表的數據進行調整,以實時反應數據的變化。例如當某個學生選定了某門課的開課計劃后,應當更新選課人某個學生選定了某門課的開課計劃后,應當更新選課人數。數。 需要用到需要用到insertedinserted表,因為做表,因為做INSERTINSERT操作時,在操作時,在insertedinserted表中存放的是要增加到該觸發(fā)器作用的表中表中
23、存放的是要增加到該觸發(fā)器作用的表中的新的元組,而的新的元組,而deleteddeleted表示此時為空。表示此時為空。23 13.4.2 UPDATE觸發(fā)器觸發(fā)器 當更新表中的元組時觸發(fā)執(zhí)行當更新表中的元組時觸發(fā)執(zhí)行UPDATE觸發(fā)器??梢杂糜|發(fā)器。可以用UPDATE (column)測試在指定的列上進行的測試在指定的列上進行的INSERT或或UPDATE操作,不能用于操作,不能用于 DELETE 操作??梢灾付ǘ嗔?。因為在操作??梢灾付ǘ嗔小R驗樵贠N子句子句中指定了表名,所以在中指定了表名,所以在IF UPDATE子句中的列名前不要包含表名。子句中的列名前不要包含表名。在在INSERT操作
24、中操作中IF UPDATE將返回將返回TRUE值,因為這些列插入值,因為這些列插入了顯式值或隱性(了顯式值或隱性(NULL)值。也可以用)值。也可以用COLUMNS_UPDATED()來測試是否更新了指定的列。來測試是否更新了指定的列。COLUMNS_UPDATED函數返回函數返回varbinary位模式,表示插入或位模式,表示插入或更新了表中的哪些列。更新了表中的哪些列。COLUMNS_UPDATED函數以從左到右的函數以從左到右的順序返回位,最右邊的位表示表中的第一列;向左的下一位表示順序返回位,最右邊的位表示表中的第一列;向左的下一位表示第二列,依此類推。第二列,依此類推。24 13.4
25、.3 DELETE 13.4.3 DELETE 觸發(fā)器觸發(fā)器 當刪除表中數據時觸發(fā)執(zhí)行當刪除表中數據時觸發(fā)執(zhí)行DELETEDELETE觸發(fā)器,用它可以實現(xiàn)觸發(fā)器,用它可以實現(xiàn)級聯(lián)刪除。此時,用到級聯(lián)刪除。此時,用到deleteddeleted表,該表中存放的是剛剛表,該表中存放的是剛剛被刪除的那些元組,而被刪除的那些元組,而insertedinserted表為空。表為空。2513.4.4 INSTEAD OF 觸發(fā)器觸發(fā)器 用用INSTEAD OF可以指定執(zhí)行觸發(fā)器而不是執(zhí)行觸發(fā)語句本可以指定執(zhí)行觸發(fā)器而不是執(zhí)行觸發(fā)語句本身,從而屏蔽原來的身,從而屏蔽原來的SQL語句,而轉向執(zhí)行觸發(fā)器內部的語
26、句,而轉向執(zhí)行觸發(fā)器內部的SQL語語句。對同一操作只能定義一個句。對同一操作只能定義一個INSTEAD OF觸發(fā)器。觸發(fā)器。 可以用可以用INSTEAD OF進行業(yè)務規(guī)則的判斷,進而決定是否執(zhí)進行業(yè)務規(guī)則的判斷,進而決定是否執(zhí)行觸發(fā)行觸發(fā)SQL語句。語句。2613.4.5 遞歸觸發(fā)器遞歸觸發(fā)器當在當在sp_dboption中啟用中啟用recursive triggers設置時,設置時,SQL Server還允許觸發(fā)器的遞歸調用。還允許觸發(fā)器的遞歸調用。遞歸觸發(fā)器允許發(fā)生兩種類型的遞歸:遞歸觸發(fā)器允許發(fā)生兩種類型的遞歸: p 間接遞歸間接遞歸p 直接遞歸直接遞歸 使用間接遞歸時,應用程序更新表使
27、用間接遞歸時,應用程序更新表T1,從而激發(fā)觸發(fā)器,從而激發(fā)觸發(fā)器TR1,該,該觸發(fā)器更新表觸發(fā)器更新表T2。在這種情況下,觸發(fā)器。在這種情況下,觸發(fā)器T2將激發(fā)并更新將激發(fā)并更新T1。使用直接遞歸時,應用程序更新表使用直接遞歸時,應用程序更新表T1,從而激發(fā)觸發(fā)器,從而激發(fā)觸發(fā)器TR1,該,該觸發(fā)器更新表觸發(fā)器更新表T1。由于表。由于表T1被更新,觸發(fā)器被更新,觸發(fā)器TR1再次激發(fā),再次激發(fā),依此類推。依此類推。2713.5 13.5 使用觸發(fā)器的使用觸發(fā)器的T-SQLT-SQL限制限制CREATE TRIGGER必須是批處理中的第一條語句,并且只能應必須是批處理中的第一條語句,并且只能應用到
28、一個表中。用到一個表中。觸發(fā)器只能在當前的數據庫中創(chuàng)建,不過觸發(fā)器可以引用當前數觸發(fā)器只能在當前的數據庫中創(chuàng)建,不過觸發(fā)器可以引用當前數據庫的外部對象。據庫的外部對象。如果指定觸發(fā)器所有者名稱以限定觸發(fā)器,請以相同的方式限定如果指定觸發(fā)器所有者名稱以限定觸發(fā)器,請以相同的方式限定表名。表名。在同一條在同一條CREATE TRIGGER語句中,可以為多種用戶操作(如語句中,可以為多種用戶操作(如INSERT和和UPDATE)定義相同的觸發(fā)器操作。)定義相同的觸發(fā)器操作。 2813.6 13.6 觸發(fā)器應用實例分析觸發(fā)器應用實例分析分析分析1 1:由于學生選課管理的實際情況,學生在期初或前一:由于
29、學生選課管理的實際情況,學生在期初或前一學期結束之前就進行選課,而成績是在學期末考試后輸入,學期結束之前就進行選課,而成績是在學期末考試后輸入,所以錄入成績實際上是對所以錄入成績實際上是對ENROLLENTENROLLENT表的數據的修改。故我表的數據的修改。故我們可以創(chuàng)建該表的修改觸發(fā)器,實現(xiàn)學分的自動累計。由們可以創(chuàng)建該表的修改觸發(fā)器,實現(xiàn)學分的自動累計。由于成績修改于成績修改UPDATEUPDATE語句可能涉及多個學生,故我們要在觸語句可能涉及多個學生,故我們要在觸發(fā)器中使用游標對每個學生進行判斷修改。發(fā)器中使用游標對每個學生進行判斷修改。29CREATE TRIGGER T_選課學分修
30、改選課學分修改ON 選課表選課表FOR UPDATEASBEGINIF (ROWCOUNT0) BEGIN DECLARE old_成績成績FLOAT, new_成績成績FLOAT DECLARE 學號學號_d CHAR(7),開課號開課號_d CHAR(6),學號學號_i CHAR(7),開課號開課號_i CHAR(6) DECLARE 學分學分INT DECLARE CUR_選課新信息選課新信息CURSOR FOR SELECT 學號學號,開課號開課號,成績成績 FROM inserted DECLARE CUR_選課舊信息選課舊信息CURSOR FOR SELECT 學號學號,開課號開課
31、號,成績成績 FROM deleted 【例【例13-1213-12】創(chuàng)建選課表的】創(chuàng)建選課表的UPDATEUPDATE觸發(fā)器,實現(xiàn)學分的級聯(lián)觸發(fā)器,實現(xiàn)學分的級聯(lián)修改。修改。30 OPEN CUR_選課新信息選課新信息 OPEN CUR_選課舊信息選課舊信息 FETCH NEXT FROM CUR_選課新信息選課新信息 INTO 學號學號_i, 開課號開課號_i,new_成績成績 FETCH NEXT FROM CUR_選課舊信息選課舊信息 INTO 學號學號_d, 開課號開課號_d,old_成績成績 SELECT 學分學分=學分學分 FROM 開課表開課表O,課程表課程表C WHERE O
32、.課號課號=C.課號課號AND 開課號開課號=開課號開課號_i WHILE fetch_status=0 BEGIN IF (old_成績成績is NULL) AND (new_成績成績=60) UPDATE 學生表學生表 SET 累計學分累計學分=累計學分累計學分+學分學分 WHERE 學號學號=學號學號_i IF (old_成績成績= 60) UPDATE 學生表學生表 SET 累計學分累計學分=累計學分累計學分+學分學分 WHERE 學號學號=學號學號_i 31IF (old_成績成績= 60) AND (new_成績成績0)BEGIN DECLARE 成績成績FLOAT DECLARE 學號學號CHAR(7),開課號開課號CHAR(6) DECLARE 學分學分INT DECLARE CUR_選課刪除選課刪除CURSOR FOR SELECT 學號學號,開課號開課號,成績成績 FROM deleted35OPEN CUR_選課刪除選課刪除FETCH NEXT FROM CUR_選課刪除選課刪除INTO 學號學號, 開課號開課號, 成績成績SELECT 學分學分=學分學分 FROM 開課表開課表O,課程表課程
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年地板護理品項目立項申請報告模稿
- 2025年水泥摻合劑項目提案報告
- 2024-2025學年延安市子長縣數學三年級第一學期期末聯(lián)考模擬試題含解析
- 2024-2025學年新疆第二師鐵門關市三年級數學第一學期期末學業(yè)水平測試試題含解析
- 關于三年級數學說課稿匯編五篇
- 2025年油炸類制品項目提案報告模板
- 2025年新型鐵合金用封接玻璃項目規(guī)劃申請報告模板
- 大學畢業(yè)頂崗實習報告九篇
- 加薪申請書模板錦集6篇
- 初二數學教學工作計劃范文5篇
- 瑜伽基礎知識題庫單選題100道及答案解析
- 廣東省廣州市2024年中考數學真題試卷(含答案)
- 【中圖】八上地理知識點總結
- 2024年資格考試-注冊質量經理考試近5年真題附答案
- 密碼行業(yè)職業(yè)技能競賽參考試題及答案
- 浙江省臺州市2023-2024學年七年級上學期期末數學試題(含答案)
- 風能發(fā)電對養(yǎng)殖場廢棄物處理的影響
- 2024年秋新人教版地理七年級上冊課件 第一章 地球 1.3.1 地球的自轉
- 2024年新高考英語全國卷I分析教學設計
- 檢驗科生物安全手冊
- 10MWP太陽能光伏并網發(fā)電電站項目電站的技術設計方案
評論
0/150
提交評論