版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、實(shí)驗(yàn)六觸發(fā)器、存儲(chǔ)過程編程實(shí)驗(yàn)一、實(shí)驗(yàn)?zāi)康膶W(xué)習(xí)存儲(chǔ)過程和觸發(fā)器的創(chuàng)建和使用方法。二、實(shí)驗(yàn)環(huán)境硬件: PC 機(jī)軟件: SQL Server 2000三、實(shí)驗(yàn)原理1. 觸發(fā)器觸發(fā)器是一種特殊的過程,它不帶參數(shù), 不被用戶和程序調(diào)用,只能由用戶對數(shù)據(jù)庫中的表的操作(插入、刪除、修改)觸發(fā)。因此,可以利用觸發(fā)器來維護(hù)表間的數(shù)據(jù)一致性。觸發(fā)器只能在表上建立,一張表最多可有3 個(gè)觸發(fā)器,即插入觸發(fā)器、刪除觸發(fā)器、修改觸發(fā)器,分別由插入、刪除、修改操作觸發(fā)。觸發(fā)器可以查詢其它表,而且可以包含復(fù)雜的SQL 語句。它們主要用于強(qiáng)制復(fù)雜的業(yè)務(wù)規(guī)則及數(shù)據(jù)完整性。創(chuàng)建觸發(fā)器創(chuàng)建觸發(fā)器時(shí)需指定:名稱。在其上定義觸發(fā)器的
2、表。觸發(fā)器將何時(shí)激發(fā)。激活觸發(fā)器的數(shù)據(jù)修改語句。有效選項(xiàng)為INSERT 、UPDATE或 DELETE 。多個(gè)數(shù)據(jù)修改語句可激活同一個(gè)觸發(fā)器。例如,觸發(fā)器可由INSERT 或 UPDATE 語句激活。執(zhí)行觸發(fā)操作的編程語句。語法:CREATETRIGGER觸發(fā)器名ON 表名|視圖名 FOR | AFTER | INSTEAD OF DELETE , INSERT , UPDATE ASSQL 語句塊RETURN使用 inserted 和 deleted 表觸發(fā)器語句中使用了兩種特殊的表:deleted 表和 inserted 表。Microsoft SQL Server 2000自動(dòng)創(chuàng)建和管理
3、這些表。可以使用這兩個(gè)臨時(shí)的駐留內(nèi)存的表測試某些數(shù)據(jù)修改的效果及設(shè)置觸發(fā)器操作的條件;然而,不能直接對表中的數(shù)據(jù)進(jìn)行更改。inserted 和 deleted 表主要用于觸發(fā)器中:擴(kuò)展表間引用完整性。在以視圖為基礎(chǔ)的基表中插入或更新數(shù)據(jù)。檢查錯(cuò)誤并基于錯(cuò)誤采取行動(dòng)。找到數(shù)據(jù)修改前后表狀態(tài)的差異,并基于此差異采取行動(dòng)。Deleted 表用于存儲(chǔ) DELETE 和 UPDATE 語句所影響的行的復(fù)本。在執(zhí)行 DELETE 或 UPDATE 語句時(shí), 行從觸發(fā)器表中刪除, 并傳輸?shù)?deleted 表中。 Deleted 表和觸發(fā)器表通常沒有相同的行。Inserted 表用于存儲(chǔ)INSERT 和 U
4、PDATE 語句所影響的行的副本。在一個(gè)插入或更新事務(wù)處理中,新建行被同時(shí)添加到inserted 表和觸發(fā)器表中。新行的副本。更新事務(wù)類似于在刪除之后執(zhí)行插入;首先舊行被復(fù)制到制到觸發(fā)器表和inserted 表中。在設(shè)置觸發(fā)器條件時(shí),應(yīng)當(dāng)為引發(fā)觸發(fā)器的操作恰當(dāng)使用Inserted 表中的行是觸發(fā)器表中deleted 表中,然后新行被復(fù)inserted 和 deleted 表。雖然在測試 INSERT 時(shí)引用 deleted 表或在測試 DELETE 時(shí)引用 inserted 表不會(huì)引起任何錯(cuò)誤,但是在這種情形下這些觸發(fā)器測試表中不會(huì)包含任何行。刪除觸發(fā)器從當(dāng)前數(shù)據(jù)庫中刪除一個(gè)或多個(gè)觸發(fā)器。語法
5、:DROPTRIGGER觸發(fā)器名 ,.n 2. 自定義數(shù)據(jù)類型SQL Server 2000 允許用戶定義自己的數(shù)據(jù)類型。創(chuàng)建用戶定義的數(shù)據(jù)類型語法:sp_addtype類型名 ,系統(tǒng)數(shù)據(jù)類型名,屬性 刪除用戶定義的數(shù)據(jù)類型語法:sp_droptype類型名 查看用戶定義的數(shù)據(jù)類型語法:sp_help類型名 3. 函數(shù)SQL Server 2000 支持兩種函數(shù)類型:內(nèi)置函數(shù)按 Transact-SQL 參考中定義的方式運(yùn)行且不能修改。只有使用Transact-SQL 參考中所定義語法的Transact-SQL 語句才能引用這類函數(shù)。用戶定義函數(shù)可以用 CREATE FUNCTION語句定義自
6、己的Transact-SQL 函數(shù)。創(chuàng)建函數(shù)語法:CREATEFUNCTION函數(shù)名(參數(shù)AS類型 = default ,.n )RETURNS函數(shù)返回值類型| TABLEASBEGIN函數(shù)體語句RETURN函數(shù)返回值| SELECT 語句END函數(shù)調(diào)用語法:DeclareSelect變量名 數(shù)據(jù)類型 變量名 = 函數(shù)名( 參數(shù)表達(dá)式 ,. )刪除函數(shù)語法:DROPFUNCTION函數(shù)名 ,.n 4. 存儲(chǔ)過程存儲(chǔ)過程是 SQL 語句和可選控制流語句的預(yù)編譯集合,以一個(gè)名稱存儲(chǔ)并作為一個(gè)單元處理。它在建立時(shí)由 RDBMS 編譯和優(yōu)化,其執(zhí)行代碼存儲(chǔ)于數(shù)據(jù)庫中的程序中。存儲(chǔ)過程可包含程序流、邏輯
7、以及對數(shù)據(jù)庫的查詢。它們可以接受參數(shù)、輸出參數(shù)、返回單個(gè)或多個(gè)結(jié)果集以及返回值。存儲(chǔ)過程分為兩類:系統(tǒng)存儲(chǔ)過程和自定義存儲(chǔ)過程。系統(tǒng)存儲(chǔ)過程在系統(tǒng)安裝時(shí)自動(dòng)裝載于系統(tǒng)數(shù)據(jù)庫中,便于用戶或數(shù)據(jù)庫管理員管理和維護(hù)數(shù)據(jù)庫中的各種數(shù)據(jù)信息和對象。系統(tǒng)存儲(chǔ)過程以“sp_”開頭。用戶自定義存儲(chǔ)過程,由用戶定義。創(chuàng)建存儲(chǔ)過程語法:CREATEPROC過程名 ( 參數(shù)變量數(shù)據(jù)類型 = default OUTPUT ) ,.n WITH RECOMPILE | ENCRYPTION | RECOMPILE , ENCRYPTION ASSQL語句 .n RETURN存儲(chǔ)過程執(zhí)行狀態(tài)執(zhí)行存儲(chǔ)過程可在命令行或批中調(diào)
8、用。如在批中調(diào)用,應(yīng)加EXEC過程名參數(shù)OUTPUT ,.n刪除存儲(chǔ)過程語法:DROPPROC過程名查看存儲(chǔ)過程語法:sp_helptext過程名更改存儲(chǔ)過程名稱語法:sp_rename舊過程名 , 新過程名四、實(shí)驗(yàn)內(nèi)容1. 利用 T-SQL 語句創(chuàng)建觸發(fā)器,并測試其作用要求:在 person 表上創(chuàng)建一個(gè)觸發(fā)器,當(dāng)刪除表person 中的員工信息時(shí),級聯(lián)刪除表pay中該員工的工資信息。參考:CREATEONFORTRIGGERpersonDELETEperson_delASIFrowcount=0RETURNDELETEpayFROMpay t, deleted dWHEREt.No=d.N
9、oRETURN注: rowcount=0 是 SQL Server 提供的系統(tǒng)變量,其值表示表中有幾行記錄被刪除了。在 pay 表上創(chuàng)建一個(gè)觸發(fā)器,檢查在修改該表時(shí)是否有不存在于person 表中的員工代碼出現(xiàn)。參考:CREATEONFORTRIGGERpayUpdatepay_updateASDeclarenum_rowsintSelectnum_rows=rowcountIFnum_rows=0RETURNIF(Select From Wherecount(*)person p, inserted ip.No=i.No) !=num_rowsBeginraiserrorrollback33
10、333'試圖修改非法的員工號到transactionpay 表中 'returnEndRETURN在 pay 表上創(chuàng)建一個(gè)觸發(fā)器,當(dāng)向該表插入數(shù)據(jù)時(shí),必須參考表person 中的 No。參考:CREATETRIGGERpay_insertONpayFORInsertASDeclarenum_rowsintSelectnum_rows=rowcountIFnum_rows=0RETURNIF(Selectcount(*)Fromperson p, inserted iWherep.No=i.No) !=num_rowsBeginraiserror33333'試圖插入非法的
11、員工號到rollbacktransactionpay 表中 'returnEndRETURN2. 利用 T-SQL 語句自定義數(shù)據(jù)類型要求:定義一個(gè)數(shù)據(jù)類型d_no ,將其長度定義為2B ,并以此來重新定義dept 表。參考:sp_addtyped_no, 'char(2)', 'NOT NULL'gocreate table dept1(deptnod_no,deptnamevarchar(10)Not Null)3. 利用 T-SQL 語句創(chuàng)建函數(shù),并調(diào)用要求:創(chuàng)建一個(gè)函數(shù)Fun_CheckNo ,檢測給定的員工號是否存在,如果存在返回0,否則返回-
12、1。參考:CreatefunctionFun_CheckNo(pno char(6)ReturnsintegerasBeginDeclarenumIntIfExists(SelectnofrompersonWhereno=pno)Select num=0ElseSelect num=-1ReturnnumEND調(diào)用函數(shù)Fun_CheckNo ,如果返回0,則向表pay 中插入一行該員工的工資記錄。參考:DeclarenumIntSelectnum=DBO. Fun_CheckNo('000008')Ifnum=0Insertpayvalues('000008',
13、2005,2,2200,280,12.4)4.利用 T-SQL 語句創(chuàng)建存儲(chǔ)過程,并調(diào)用要求:創(chuàng)建一個(gè)存儲(chǔ)過程Pro_CalAge ,根據(jù) person 表中的出生日期計(jì)算其實(shí)際年齡。參考:CreatePROCPro_CalAgecode char(6), age int OUTPUTAsDeclarebirth varchar(4), today varchar(4)Selectbirth=DATENAME(year,birthday)FrompersonWhereno=codeSelecttoday=DATENAME(year,GETDATE()Selectage=CONVERT(INT,today)-CONVERT(I
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025購房借款合同書范文
- 跨學(xué)科知識聯(lián)合的未來發(fā)展趨勢
- 包魚塘合同范例
- 汕頭大學(xué)《運(yùn)作管理》2023-2024學(xué)年第一學(xué)期期末試卷
- 山東電力安裝合同范例
- 2024至2030年電動(dòng)鉛筆刨電機(jī)項(xiàng)目投資價(jià)值分析報(bào)告
- 售后網(wǎng)合作合同范例格式
- 場地承包合同范例
- 歸僑僑眷食品救助合同范例
- 煤炭裝袋銷售合同范例
- 國開(河北)2024年秋《現(xiàn)代產(chǎn)權(quán)法律制度專題》形考作業(yè)1-4答案
- 2024江蘇省常熟市事業(yè)單位招聘176人歷年高頻難、易錯(cuò)點(diǎn)500題模擬試題附帶答案詳解
- 居民健康檔案電子建檔工作實(shí)施方案
- 外研版(2024新版)七年級上冊英語期末(Units 1~6)學(xué)業(yè)質(zhì)量測試卷(含答案)
- 2024年湖南省長沙市中考數(shù)學(xué)試題(含解析)
- 供應(yīng)鏈與生產(chǎn)制造L1-L4級高階流程規(guī)劃框架 相關(guān)兩份資料
- 廚房里的危險(xiǎn)課件
- 牛津譯林版(2024新版)七年級上冊英語Unit 8 單元測試卷(含答案)
- 2024年中國人保行測筆試題庫
- GB/T 6553-2024嚴(yán)酷環(huán)境條件下使用的電氣絕緣材料評定耐電痕化和蝕損的試驗(yàn)方法
- 住建部設(shè)計(jì)施工合同范本(2024版)
評論
0/150
提交評論