




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第六章Transact-SQL簡(jiǎn)介、存儲(chǔ)過(guò)程和觸發(fā)器6.1Transact-SQL簡(jiǎn)介
6.2存儲(chǔ)過(guò)程
6.3觸發(fā)器6.1Transact-SQL簡(jiǎn)介
6.1.1批處理、腳本和注釋6.1.2常量和變量6.1.3流程控制語(yǔ)句1批處理 建立批處理如同編寫SQL語(yǔ)句,區(qū)別在于它是多條語(yǔ)句同時(shí)執(zhí)行的,用GO語(yǔ)句作為一個(gè)批處理的結(jié)束。2腳本 腳本是批處理的存在方式,將一個(gè)或多個(gè)批處理組織到一起就是一個(gè)腳本。 腳本可以在查詢分析器中執(zhí)行,查詢分析器是編輯、調(diào)試和使用腳本的最好環(huán)境。
3注釋1)單行注釋:使用兩個(gè)連在一起的減號(hào)“––”作為注釋符語(yǔ)法格式為:––注釋文本
2)塊注釋:使用“/**/”作為注釋符塊注釋的語(yǔ)法格式為:/*注釋文本*/或:/*注釋文本*/6.1.2常量和變量
常量和變量是程序設(shè)計(jì)中不可缺少的元素。變量又分為局部變量和全局變量,局部變量是一個(gè)能夠保存特定數(shù)據(jù)類型實(shí)例的對(duì)象,是程序中各種類型數(shù)據(jù)的臨時(shí)存儲(chǔ)單元,用在批處理內(nèi)SQL語(yǔ)句之間傳遞數(shù)據(jù)。全局變量是系統(tǒng)給定的特殊變量。1常量Transact-SQL的常量主要有以下幾種。字符串常量數(shù)值常量日期常量3局部變量 局部變量是用戶在程序中定義的變量,一次只能保存一個(gè)值,它僅在定義的批處理范圍內(nèi)有效。局部變量可以臨時(shí)存儲(chǔ)數(shù)值。局部變量名總是以@符號(hào)開(kāi)始,最長(zhǎng)為128個(gè)字符。 使用DECLARE語(yǔ)句聲明局部變量,定義局部變量的名字、數(shù)據(jù)類型,有些還需要確定變量的長(zhǎng)度。4變量的聲明與賦值聲明變量的語(yǔ)句格式:DECLARE@局部變量名數(shù)據(jù)類型注:不能把局部變量指定為text或image類型,使用DECLARE聲明一個(gè)局部變量后,這個(gè)變量的值將被初始化為null。變量的賦值語(yǔ)句格式為:SET@局部變量名=值|表達(dá)式注:表達(dá)式可以是任意的SQLSERVER表達(dá)式。6.1.3流程控制語(yǔ)句流程控制語(yǔ)句是組織較復(fù)雜Transact-SQL語(yǔ)句的語(yǔ)法元素,在批處理、存儲(chǔ)過(guò)程、腳本和特定的檢索中使用。它們包括條件控制語(yǔ)句、無(wú)條件轉(zhuǎn)移語(yǔ)句和循環(huán)語(yǔ)句等。
主要的流程控制語(yǔ)句:BEGIN…END:定義語(yǔ)句塊IF…ELSE:若指定條件為真,執(zhí)行一個(gè)分支,否則執(zhí)行另一個(gè)分支WHILE:當(dāng)指定條件為真時(shí)重復(fù)一些語(yǔ)句CASE:允許表達(dá)式按照條件返回不同的值BREAK:退出最內(nèi)層的WHILE循環(huán)RETURN:重新開(kāi)始WHILE循環(huán)WAITFOR:為語(yǔ)句的執(zhí)行設(shè)置延遲1BEGIN…END語(yǔ)句塊BEGIN和END用來(lái)定義語(yǔ)句塊,必須成對(duì)出現(xiàn)。它將多個(gè)SQL語(yǔ)句括起來(lái),相當(dāng)于一個(gè)單一語(yǔ)句,其語(yǔ)法格式如下。BEGIN
語(yǔ)句1或語(yǔ)句塊1 語(yǔ)句2或語(yǔ)句塊2 …END3WHILE語(yǔ)句 WHILE語(yǔ)句用來(lái)實(shí)現(xiàn)循環(huán)結(jié)構(gòu),其語(yǔ)法格式如下:WHILE邏輯表達(dá)式語(yǔ)句塊 當(dāng)邏輯表達(dá)式為真時(shí),執(zhí)行循環(huán)體,直到邏輯表達(dá)式為假。 BREAK語(yǔ)句退出WHILE循環(huán),CONTINUE語(yǔ)句跳過(guò)語(yǔ)句塊中的所有其他語(yǔ)句,開(kāi)始下一次循環(huán)。例:若IF條件為真或?yàn)榧贂r(shí)要執(zhí)行的語(yǔ)句只有一條(默認(rèn)時(shí),一條語(yǔ)句就是一個(gè)語(yǔ)句塊),則可以不使用BEGIN…END。DECLARE@xint,@yint,@zintSET@x=40SET@y=30IF(@x>@y)SET@z=@x-@yELSESET@z=@y-@xSET@x=0PRINT@xPRINT@yPRINT@z執(zhí)行結(jié)果為
03010例:若希望條件為假時(shí),在ELSE語(yǔ)句中執(zhí)行其后續(xù)的兩條語(yǔ)句,則必須使用BEGIN…END將這兩條語(yǔ)句包括起來(lái),使其成為一個(gè)語(yǔ)句塊。DECLARE@xint,@yint,@zintSET@x=40SET@y=30IF(@x>@y)SET@z=@x-@yELSEBEGINSET@z=@y-@xSET@x=0END例:計(jì)算1+2+3+…+100的和DECLARE@iint,@sumintSET@i=1SET@sum=0WHILE@i<=100BEGINSET@sum=@sum+@iSET@i=@i+1ENDPRINT@sum6.2存儲(chǔ)過(guò)程
存儲(chǔ)過(guò)程(storedprocedure)是一組事先編譯好的Transact-SQL代碼。存儲(chǔ)過(guò)程作為一個(gè)獨(dú)立的數(shù)據(jù)庫(kù)對(duì)象,可以作為一個(gè)單元被用戶的應(yīng)用程序調(diào)用。由于存儲(chǔ)過(guò)程是已經(jīng)編譯好的代碼,所以執(zhí)行的時(shí)候不必再次進(jìn)行編譯,從而提高了程序的運(yùn)行效率。使用存儲(chǔ)過(guò)程的好處:1、執(zhí)行速度快。2、模塊化的程序設(shè)計(jì)。3、減少網(wǎng)絡(luò)通信量。4、保證系統(tǒng)的安全性。Default:表示參數(shù)的默認(rèn)值。Output:表明參數(shù)是輸出參數(shù)。執(zhí)行存儲(chǔ)過(guò)程的SQL語(yǔ)句是EXECUTE,其語(yǔ)法格式為:[EXECUTE]存儲(chǔ)過(guò)程名[實(shí)參[,OUTPUT][,…n]]
存儲(chǔ)過(guò)程可以嵌套,SQLServer2000最多可以允許嵌套32層存儲(chǔ)過(guò)程。例1:帶有復(fù)雜查詢的存儲(chǔ)過(guò)程:查詢計(jì)算機(jī)系學(xué)生的考試情況,列出學(xué)生的姓名、課程名和考試成績(jī)。CREATEPROCEDURES_grade1ASSELECTsname,cname,gradeFROMStudentsJOINscONs.sno=sc.snoJOINcoursecONo=oWHERESdept=‘計(jì)算機(jī)系’執(zhí)行此存儲(chǔ)過(guò)程:EXECS_grade1例3、帶有多個(gè)輸入?yún)?shù)并有默認(rèn)值的存儲(chǔ)過(guò)程:查詢某個(gè)學(xué)生某門課程的考試成績(jī),若沒(méi)有指定課程,則默認(rèn)為‘?dāng)?shù)據(jù)庫(kù)’。CREATEPROCS_GRADE2@Snamechar(20),@Cnamechar(20)=‘?dāng)?shù)據(jù)庫(kù)’ASSELECTSname,Cname,GradeFROMStudent,Scourse,CourseWHERESname=@SnameandCname=@CnameandStudent.Sno=Scourse.SnoAndCourse.Cno=Scourse.Cno
執(zhí)行帶多個(gè)參數(shù)的存儲(chǔ)過(guò)程時(shí),參數(shù)的傳遞方式有兩種:1、按參數(shù)位置傳遞:執(zhí)行存儲(chǔ)過(guò)程的EXEC語(yǔ)句中的實(shí)參的排列順序必須與定義存儲(chǔ)過(guò)程時(shí)定義的參數(shù)的順序一致EXECS_GRADE2’張三’,’VB’2、按參數(shù)名傳遞:執(zhí)行存儲(chǔ)過(guò)程的EXEC語(yǔ)句中要指明定義存儲(chǔ)過(guò)程時(shí)定義的參數(shù)的名字以及此參數(shù)的值,而不關(guān)心參數(shù)的定義順序EXECS_GRADE2@Sname=’張三’,@Cname
=’VB’例4、帶有多個(gè)輸入?yún)?shù)并均指定默認(rèn)值的存儲(chǔ)過(guò)程:查詢指定系,指定性別的學(xué)生中年齡大于等于指定年齡的學(xué)生的情況。系的默認(rèn)值為‘計(jì)算機(jī)’,默認(rèn)的性別為‘男’,默認(rèn)的年齡為20。CREATEPROCS_GRADE3@deptchar(20)=‘計(jì)算機(jī)’
,@sexchar(2)=‘男’,@ageint=20
ASSELECT*FROMStudentWHERESdept=@deptandSsex=@sexandSage>=@age
例5、帶有輸出參數(shù)的存儲(chǔ)過(guò)程:計(jì)算兩個(gè)數(shù)得到積,將結(jié)果作為輸出參數(shù)返回給調(diào)用者。CREATEPROCEDUREPROC1@var1int,@var2int,@var3intoutputASSET@var3=@var1*@var2執(zhí)行此存儲(chǔ)過(guò)程的示例:DECLARE@resintEXECPROC15,7,@resoutputPRINT@res結(jié)果為:35例6、創(chuàng)建一個(gè)存儲(chǔ)過(guò)程,向?qū)W生表中插入數(shù)據(jù)。
CREATEPROCinsert_student@snochar(10),@snamechar(10),@ssexchar(4),@sageint,@sdeptchar(20)asinsertintostudent,@sage,@sdept)執(zhí)行此存儲(chǔ)過(guò)程execinsert_student‘1001’,’李明’,’男’,’20’,’計(jì)算機(jī)系’6.2.2查看存儲(chǔ)過(guò)程信息1.使用T-SQL語(yǔ)句查看存儲(chǔ)過(guò)程(1)可以使用sp_helpText命令查看創(chuàng)建存儲(chǔ)過(guò)程的文本信息。例如:usemastergosp_helptextsp_whogo系統(tǒng)返回信息是:(2)可以使用sp_help查看存儲(chǔ)過(guò)程的一般信息。例如:usemastergosp_helpproc1go6.2.3修改存儲(chǔ)過(guò)程
SQLServer提供了在不改變存儲(chǔ)過(guò)程使用許可和名字的情況下,對(duì)存儲(chǔ)過(guò)程進(jìn)行修改的語(yǔ)句。語(yǔ)法格式為:ALTERPROC[EDURE]存儲(chǔ)過(guò)程名[{@參數(shù)名數(shù)據(jù)類型}[=default][OUTPUT]][,…n]ASSQL語(yǔ)句注:也可以使用企業(yè)管理器進(jìn)行系統(tǒng)存儲(chǔ)過(guò)程的修改。例6、將例1定義的存儲(chǔ)過(guò)程修改,使之能查詢?nèi)魏沃付ㄏ档膶W(xué)生的修課情況。ALTERPROCS_Grade1@deptchar(20)ASSELECTSname,Cname,GradeFROMStudentJOINScourseONStudent.Sno=Scourse.SnoJOINCourseONCourse.Cno=Scourse.CnoWHERESdept=@dept6.2.5刪除存儲(chǔ)過(guò)程1.使用T-SQL語(yǔ)句刪除存儲(chǔ)過(guò)程刪除存儲(chǔ)過(guò)程使用DROPPROCEDURE語(yǔ)句。語(yǔ)法格式為:DROPPROCEDURE存儲(chǔ)過(guò)程名[,…n]例如:usestudentgodropprocedureS_grade1go6.3觸發(fā)器
觸發(fā)器是一種特殊的存儲(chǔ)過(guò)程,他不需要由用戶調(diào)用執(zhí)行,而是當(dāng)用戶對(duì)表中的數(shù)據(jù)進(jìn)行UPDATE、INSERT或DELETE操作時(shí)自動(dòng)觸發(fā)執(zhí)行的,觸發(fā)器通常用于保證業(yè)務(wù)規(guī)則的數(shù)據(jù)完整性,其主要優(yōu)點(diǎn)是用戶可以用編程的方法來(lái)實(shí)現(xiàn)復(fù)雜的處理邏輯和商業(yè)規(guī)則,增強(qiáng)了數(shù)據(jù)完整性約束規(guī)則。6.3.1創(chuàng)建觸發(fā)器1.使用T-SQL語(yǔ)句創(chuàng)建觸發(fā)器創(chuàng)建觸發(fā)器使用CREATETRIGGER語(yǔ)句。語(yǔ)法格式如下:CREATETRIGGER觸發(fā)器名ON表名[WITHENCRYPTION]{FOR|AFTER|INSTEADOF}{[DELETE][,][INSERT][,][UPDATE]}ASSQL語(yǔ)句其中:“觸發(fā)器名稱”必須是唯一的ON子句用于指定在其上執(zhí)行觸發(fā)器的表
AFTER:指定觸發(fā)器只有在引發(fā)觸發(fā)器執(zhí)行的SQL語(yǔ)句指定的操作都已成功執(zhí)行,并且所有的引用級(jí)聯(lián)操作和約束檢查也成功完成后,才執(zhí)行此觸發(fā)器,也叫后觸發(fā)性觸發(fā)器
FOR如果僅指定FOR關(guān)鍵字,則AFTER是默認(rèn)設(shè)置INSTEADOF:指定執(zhí)行觸發(fā)器而不是執(zhí)行引發(fā)觸發(fā)器執(zhí)行的SQL語(yǔ)句,從而替代觸發(fā)語(yǔ)句的操作。(注:只有SQLServer2000才支持)也叫前觸發(fā)器例1:創(chuàng)建帶有提示信息的觸發(fā)器,每當(dāng)用戶在course表中執(zhí)行插入操作時(shí),向用戶產(chǎn)生一條提示信息。createtriggertri_insert_courseoncourseforinsertasprint’在course表中插入數(shù)據(jù)’——只是為了提示信息用執(zhí)行如下語(yǔ)句測(cè)試觸發(fā)器的作用:Insertintocourse(cno,cname)values(‘d01’,‘?dāng)?shù)據(jù)庫(kù)')例2、創(chuàng)建一個(gè)觸發(fā)器,當(dāng)向表student中修改一條記錄時(shí),自動(dòng)顯示student表中的記錄。CREATETRIGGERchange_displayONstudentFORupdateASSELECT*FROMstudent例3、創(chuàng)建限制刪除的觸發(fā)器,限制刪除SC表中不及格學(xué)生的成績(jī)記錄。createtriggertri_del_gradeonSCfordeleteasifexists(select*fromDELETEDwheredeleted.grade<60)ROLLBACK在CREATETRIGGER語(yǔ)句中不能使用SELECT語(yǔ)句返回對(duì)表格查詢的數(shù)據(jù),因?yàn)橛|發(fā)器不接受用戶應(yīng)用程序傳遞的參數(shù),從而也無(wú)法向用戶應(yīng)用程序返回查詢表格數(shù)據(jù)所得到的結(jié)果。在創(chuàng)建觸發(fā)器的語(yǔ)句中,禁止使用下列T-SQL語(yǔ)句:ALTERDATABASE ALTERPROCEDUREALTERTABLE ALTERTRIGGERALTERVIEW CREATEDATABASECREATEDEFAULT CREATEINDEXCREATE
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 彩鋼房基礎(chǔ)防水施工方案
- 裝配式預(yù)留預(yù)埋施工方案
- 玻璃鋼除塵凈化塔施工方案
- 合盛包裝科技(徐州)有限公司玻璃瓶包裝裝潢及配套件加工項(xiàng)目環(huán)境影響報(bào)告表
- 保亭縣大件垃圾及園林垃圾破碎分揀及建筑垃圾轉(zhuǎn)運(yùn)調(diào)配場(chǎng)項(xiàng)目環(huán)評(píng)報(bào)告表
- 超高速切削機(jī)床項(xiàng)目風(fēng)險(xiǎn)識(shí)別與評(píng)估綜合報(bào)告
- 陽(yáng)泉直埋式保溫管施工方案
- 場(chǎng)地平整及強(qiáng)夯施工方案
- 施工方案編制格式
- 湖北省黃岡市部分學(xué)校2024-2025學(xué)年九年級(jí)下學(xué)期入學(xué)化學(xué)試題(原卷版+解析版)
- 連接員題庫(kù)(全)題庫(kù)(855道)
- 工程安全管理組織機(jī)構(gòu)框架圖
- 新版現(xiàn)代西班牙語(yǔ)學(xué)生用書(shū)第一冊(cè)課后習(xí)題答案
- JCT533-2016 建材工業(yè)用鉻合金鑄造磨球
- 活動(dòng)10《體驗(yàn)微視頻拍攝樂(lè)趣》第二課時(shí)-體驗(yàn)微視頻拍攝樂(lè)趣 第二課時(shí) 課件
- 淺談物業(yè)管理行業(yè)工程造價(jià)控制
- 社會(huì)工作-心理學(xué)視角下的校園欺凌認(rèn)知與對(duì)策研究論文
- 公文寫作規(guī)范及技巧
- 面神經(jīng)炎臨床路徑
- 月光奏鳴曲全面版
- 2022年湖北省中小學(xué)教師高級(jí)職稱專業(yè)水平能力測(cè)試模擬題
評(píng)論
0/150
提交評(píng)論