




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、SQL Server 存儲(chǔ)過(guò)程和觸發(fā)器主要內(nèi)容主要內(nèi)容lTransact-SQL編程基礎(chǔ)l事務(wù)管理l游標(biāo) l存儲(chǔ)過(guò)程l觸發(fā)器 1 Transact-SQL編程基礎(chǔ)編程基礎(chǔ) l標(biāo)識(shí)符、運(yùn)算符、變量l函數(shù)l流程控制語(yǔ)句lGOTO語(yǔ)句lRETURN語(yǔ)句l打印輸出語(yǔ)句l注釋語(yǔ)句標(biāo)識(shí)符標(biāo)識(shí)符l標(biāo)識(shí)符是由用戶(hù)定義的有意義的可識(shí)別的字符序列,通常用來(lái)標(biāo)識(shí)服務(wù)器、數(shù)據(jù)庫(kù)、數(shù)據(jù)庫(kù)對(duì)象、常量、變量等 l命名標(biāo)識(shí)符時(shí)必須遵循以下規(guī)則 l第一個(gè)字符必須是下列字符之一: l字母、下劃線(xiàn)(_)、或者# l后續(xù)字符可以是:l字母、數(shù)字、_、#、$、等符號(hào) l不能使用SQL中的關(guān)鍵字和運(yùn)算符,不允許嵌入空格或其它特殊字符 運(yùn)
2、算符運(yùn)算符l算術(shù)運(yùn)算符l+ ,- ,*, / ,%l賦值運(yùn)算符l=l比較運(yùn)算符l= , ,= ,= ,l邏輯運(yùn)算符land ,or ,notlBetweenand,In,Like,Existsl連接運(yùn)算符l+ 用于字符串?dāng)?shù)據(jù)的連接運(yùn)算符的優(yōu)先順序運(yùn)算符的優(yōu)先順序 l*、/、%l+、-l=、=、=、lnotlandlbetween、in、like、orl= 算術(shù)運(yùn)算符算術(shù)運(yùn)算符比較運(yùn)算符比較運(yùn)算符邏輯運(yùn)算符邏輯運(yùn)算符賦值運(yùn)算符賦值運(yùn)算符變量變量 l局部變量l由用戶(hù)定義和使用,可賦值并參與運(yùn)算l作用域 批處理、觸發(fā)器、存儲(chǔ)過(guò)程l聲明 declare 變量名 數(shù)據(jù)類(lèi)型,l賦值 select 變量名=
3、值 或 SET 局部變量名=表達(dá)式【例【例1】DECLARE x float, var char(8) 該定義語(yǔ)句定義了變量該定義語(yǔ)句定義了變量x是浮點(diǎn)實(shí)型,變量是浮點(diǎn)實(shí)型,變量var是長(zhǎng)度為是長(zhǎng)度為8的定長(zhǎng)字符數(shù)據(jù)類(lèi)型。的定長(zhǎng)字符數(shù)據(jù)類(lèi)型。 【例2】定義變量c_code和score,并分別用SET和SELECT語(yǔ)句為它們賦值,然后查詢(xún)所有課程號(hào)為c_code,且成績(jī)小于score的學(xué)生成績(jī)信息。DECLARE DECLARE c_codec_code char(6), score char(6), score Numeric(3,1)Numeric(3,1)SET SET c_codec_c
4、ode=130001=130001SELECT score=80SELECT score=80 SELECT SELECT * * FROM FROM T_GradeT_Grade WHERE WHERE CourseCodeCourseCode=c_codec_code AND AND GradescoreGrade=3 BEGIN SET text=你選了你選了+CAST(cn AS char(2) /* CAST函數(shù)將函數(shù)將cn的值轉(zhuǎn)換為長(zhǎng)度為的值轉(zhuǎn)換為長(zhǎng)度為2的字符數(shù)據(jù)的字符數(shù)據(jù)*/ SET text=text+門(mén)課。很好,你完成了任務(wù)!門(mén)課。很好,你完成了任務(wù)! ENDELSE BE
5、GIN SET text=你選了你選了+CAST(cn AS char(2) SET text=text+門(mén)課。選課太少,加油!門(mén)課。選課太少,加油! ENDSELECT text AS 選課提示選課提示多分支的選擇語(yǔ)句多分支的選擇語(yǔ)句-CASEl簡(jiǎn)單簡(jiǎn)單 CASE 函數(shù)形式:將某個(gè)表達(dá)式與一組函數(shù)形式:將某個(gè)表達(dá)式與一組簡(jiǎn)單表達(dá)式進(jìn)行比較以確定結(jié)果。簡(jiǎn)單表達(dá)式進(jìn)行比較以確定結(jié)果。lCASE 搜索函數(shù)形式:計(jì)算一組條件表達(dá)式搜索函數(shù)形式:計(jì)算一組條件表達(dá)式以確定結(jié)果以確定結(jié)果簡(jiǎn)單CASE函數(shù)l語(yǔ)法格式:語(yǔ)法格式: CASE 輸入表達(dá)式輸入表達(dá)式 WHEN 情況表達(dá)式情況表達(dá)式 THEN 結(jié)果表
6、達(dá)式結(jié)果表達(dá)式 . ELSE 結(jié)果表達(dá)式結(jié)果表達(dá)式 ENDl說(shuō)明:說(shuō)明:1)當(dāng)表達(dá)式的值與某個(gè)情況表達(dá)式的值相等時(shí),返回相當(dāng)表達(dá)式的值與某個(gè)情況表達(dá)式的值相等時(shí),返回相應(yīng)結(jié)果表達(dá)式的值應(yīng)結(jié)果表達(dá)式的值 。 2)如果全部都不相等,則返回如果全部都不相等,則返回 ELSE中的結(jié)果表達(dá)式,中的結(jié)果表達(dá)式,若沒(méi)有若沒(méi)有ELSE子句,則返回子句,則返回NULL值。值。 【例例5 5】查詢(xún)查詢(xún)0707級(jí)女同學(xué)的住校情況。級(jí)女同學(xué)的住校情況。SELECT StudentName AS 姓名姓名, CASE LiveInDorm WHEN 0 THEN 未住校未住校 WHEN 1 THEN 住校住校 END
7、AS 是否住校是否住校 FROM T_StudentWHERE Sex=女女 AND LEFT(StudentCode,2)=07字段:是否住校的表達(dá)CASE 搜索函數(shù)搜索函數(shù)語(yǔ)法格式:語(yǔ)法格式: CASE WHEN 條件表達(dá)式條件表達(dá)式 THEN 結(jié)果表達(dá)式結(jié)果表達(dá)式 . ELSE結(jié)果表達(dá)式結(jié)果表達(dá)式 END【例例6 6】統(tǒng)計(jì)每個(gè)學(xué)生平均成績(jī)并劃分等級(jí)統(tǒng)計(jì)每個(gè)學(xué)生平均成績(jī)并劃分等級(jí)。SELECT SELECT StudentCodeStudentCode AS AS 學(xué)號(hào)學(xué)號(hào), STR(AVG(Grade),5,2) AS , STR(AVG(Grade),5,2) AS 平均成績(jī)平均成績(jī),
8、 CASE CASE WHEN WHEN AVG(GradeAVG(Grade)=90 THEN A)=90 THEN A WHEN WHEN AVG(GradeAVG(Grade)=80 THEN B)=80 THEN B WHEN WHEN AVG(GradeAVG(Grade)=70 THEN C)=70 THEN C WHEN WHEN AVG(GradeAVG(Grade)=60 THEN D)=60 THEN D WHEN WHEN AVG(GradeAVG(Grade)60 THEN E)60 THEN E END AS END AS 等級(jí)等級(jí) FROM FROM T_Grade
9、T_Grade GROUP BY GROUP BY StudentCodeSELECTStudentCodeSELECT流程控制語(yǔ)句流程控制語(yǔ)句2BEGINEND語(yǔ)句l定義語(yǔ)句塊:l多條T-SQL語(yǔ)句使用BEGINEND組合起來(lái)形成一個(gè)語(yǔ)句塊。l可以嵌套使用l語(yǔ)法形式為 BEGIN SQL語(yǔ)句1 SQL語(yǔ)句2 END 流程控制語(yǔ)句流程控制語(yǔ)句3WHILECONTINUEBREAK語(yǔ)句l條件循環(huán)語(yǔ)句lContinue可以使程序跳過(guò)其后面的語(yǔ)句,回到while循環(huán)的第一行命令;lBreak使程序完全跳出循環(huán),結(jié)束while語(yǔ)句。l語(yǔ)法形式為 WHILE BREAK或CONTINUE 結(jié)束結(jié)束整個(gè)整
10、個(gè)循環(huán)循環(huán)結(jié)束結(jié)束本次本次循環(huán)循環(huán)while breakwhile continue【例例8 8】計(jì)算計(jì)算1010!。 DECLARE p int, i smallint, text varchar(100)SET p=1SET i=1WHILE i=10 BEGIN SET p= p*i SET i=i+1 ENDSET text=12310=+CAST(p AS char(10)SELECT text AS 計(jì)算結(jié)果GOTOGOTO語(yǔ)句語(yǔ)句 GOTO語(yǔ)句的語(yǔ)法形式為 l跳轉(zhuǎn)語(yǔ)句,跳轉(zhuǎn)到標(biāo)有標(biāo)識(shí)符指定位置 GOTO label label:【例9】利用利用GOTOGOTO語(yǔ)句求出從語(yǔ)句求出從
11、1 1加到加到5 5的總和的總和 RETURNRETURN語(yǔ)句語(yǔ)句 l終止語(yǔ)句,用于無(wú)條件終止一個(gè)查詢(xún)、存儲(chǔ)過(guò)程或者批處理。lRETURN語(yǔ)句的語(yǔ)法形式為 RETURN 整數(shù) 打印輸出語(yǔ)句打印輸出語(yǔ)句 可以顯示變量的值PRINT語(yǔ)句的語(yǔ)法如下 PRINT | | 例例10 利用利用PRINTPRINT語(yǔ)句判斷變量值的示例語(yǔ)句判斷變量值的示例 注釋語(yǔ)句注釋語(yǔ)句 (1)整塊注釋/* 注釋塊 */(2)從行的后部分注釋 語(yǔ)句 注釋事務(wù)管理事務(wù)管理B Beginegin Transaction Transaction 事務(wù)開(kāi)始事務(wù)開(kāi)始 SQLSQL語(yǔ)句組語(yǔ)句組 C Commit Transaction
12、 ommit Transaction 提交事務(wù)提交事務(wù)說(shuō)明:說(shuō)明:l用戶(hù)定義的事務(wù)也稱(chēng)為顯式事務(wù)用戶(hù)定義的事務(wù)也稱(chēng)為顯式事務(wù)l事務(wù)只用于數(shù)據(jù)修改語(yǔ)句事務(wù)只用于數(shù)據(jù)修改語(yǔ)句l可以在可以在commit transactioncommit transaction之前使用之前使用roolbackroolback transaction transaction取取消事務(wù)并撤銷(xiāo)對(duì)數(shù)據(jù)所作的任何改變,命令為:消事務(wù)并撤銷(xiāo)對(duì)數(shù)據(jù)所作的任何改變,命令為:roolbackroolback transaction transaction savepoint_namesavepoint_name lSavepoint
13、_nameSavepoint_name為保存點(diǎn),是用戶(hù)放在事務(wù)中的一個(gè)標(biāo)記,為保存點(diǎn),是用戶(hù)放在事務(wù)中的一個(gè)標(biāo)記,指明回滾點(diǎn)指明回滾點(diǎn)l事務(wù)管理通過(guò)確保要么完成整個(gè)事務(wù),要么回滾事務(wù),來(lái)確事務(wù)管理通過(guò)確保要么完成整個(gè)事務(wù),要么回滾事務(wù),來(lái)確保數(shù)據(jù)庫(kù)的一致性和可恢復(fù)性保數(shù)據(jù)庫(kù)的一致性和可恢復(fù)性例例1111 建立一個(gè)事務(wù),建立一個(gè)事務(wù),用來(lái)將用來(lái)將mag_deptmag_dept表中表中depiddepid為為1 1的記錄的的記錄的depmanagerdepmanager字段的值更改為字段的值更改為“王涓涓王涓涓” 例例1212 建立一個(gè)事務(wù),建立一個(gè)事務(wù),用來(lái)更改用來(lái)更改mag_deptmag_
14、dept表中表中depiddepid為為1 1以及以及depiddepid為為2 2的記錄的的記錄的depmanagerdepmanager字段字段的值,并回滾事務(wù)到保存點(diǎn)的值,并回滾事務(wù)到保存點(diǎn)存儲(chǔ)過(guò)程存儲(chǔ)過(guò)程 l存儲(chǔ)過(guò)程:可以將一些固定的操作集中起來(lái)由SQL Server數(shù)據(jù)庫(kù)服務(wù)器完成,以實(shí)現(xiàn)某個(gè)任務(wù);存儲(chǔ)過(guò)程允許聲明變量、輸出參數(shù)、返回單個(gè)或者多個(gè)結(jié)果集以及返回值;l存儲(chǔ)過(guò)程存在于數(shù)據(jù)庫(kù)內(nèi),可由應(yīng)用程序調(diào)用執(zhí)行。l存儲(chǔ)過(guò)程分為兩類(lèi):l系統(tǒng)存儲(chǔ)過(guò)程(存儲(chǔ)在master數(shù)據(jù)庫(kù)中)l用戶(hù)自定義的存儲(chǔ)過(guò)程。l使用存儲(chǔ)過(guò)程有以下優(yōu)點(diǎn):1)可以在一個(gè)存儲(chǔ)過(guò)程中執(zhí)行多條SQL語(yǔ)句;2)可多次調(diào)用;3
15、)創(chuàng)建時(shí)就在服務(wù)器端進(jìn)行了編譯,節(jié)省SQL語(yǔ)句的運(yùn)行時(shí)間;4)提供了安全機(jī)制,它限制了用戶(hù)訪(fǎng)問(wèn)SQL語(yǔ)句的權(quán)利,只為特定用戶(hù)開(kāi)放存儲(chǔ)過(guò)程。創(chuàng)建存儲(chǔ)過(guò)程創(chuàng)建存儲(chǔ)過(guò)程 常用存儲(chǔ)過(guò)程的語(yǔ)法格式:常用存儲(chǔ)過(guò)程的語(yǔ)法格式: CREATE PROCDURE 存儲(chǔ)過(guò)程名存儲(chǔ)過(guò)程名 形式參數(shù)形式參數(shù) 數(shù)據(jù)類(lèi)型數(shù)據(jù)類(lèi)型VARYING=默認(rèn)值默認(rèn)值OUTPUT AS SQL語(yǔ)句語(yǔ)句1 SQL語(yǔ)句語(yǔ)句n 說(shuō)明:說(shuō)明: l“形式參數(shù)形式參數(shù)”名稱(chēng)必須符合標(biāo)識(shí)符規(guī)則;名稱(chēng)必須符合標(biāo)識(shí)符規(guī)則;lOUTPUT表示該參數(shù)是可以返回的,可將信息返回調(diào)用者;表示該參數(shù)是可以返回的,可將信息返回調(diào)用者;l如果有多個(gè)參數(shù),可以依次按
16、以上參數(shù)定義規(guī)則列出,用逗號(hào)如果有多個(gè)參數(shù),可以依次按以上參數(shù)定義規(guī)則列出,用逗號(hào)“,”隔開(kāi)。隔開(kāi)。例例1313 建立一個(gè)名為建立一個(gè)名為“全部雇員全部雇員”的存儲(chǔ)過(guò)程,的存儲(chǔ)過(guò)程,用用來(lái)查詢(xún)來(lái)查詢(xún)mag_empmag_emp表的所有記錄表的所有記錄 例例14 建立一個(gè)名為建立一個(gè)名為“雇員查詢(xún)雇員查詢(xún)”的存儲(chǔ)過(guò)程,的存儲(chǔ)過(guò)程,查詢(xún)某種職務(wù)雇員的所有情況查詢(xún)某種職務(wù)雇員的所有情況 【例15】在School中創(chuàng)建一個(gè)的存儲(chǔ)過(guò)程proc_SearchStudent,查詢(xún)指定學(xué)生的選課情況。CREATE PROC CREATE PROC proc_SearchStudentproc_SearchSt
17、udent stcodestcode char(8) char(8)ASASSELECT SELECT T_Student.StudentName,T_Course.CourseNameT_Student.StudentName,T_Course.CourseNameFROM T_Student JOIN T_Grade JOIN T_CourseFROM T_Student JOIN T_Grade JOIN T_Course ON T_Grade.CourseCode=T_Course.CourseCode ON T_Grade.CourseCode=T_Course.CourseCode
18、 ON T_Student.StudentCode=T_Grade.StudentCode ON T_Student.StudentCode=T_Grade.StudentCodeWHERE WHERE T_Student.StudentCodeT_Student.StudentCode=scodescode 修改存儲(chǔ)過(guò)程修改存儲(chǔ)過(guò)程 修改存儲(chǔ)過(guò)程的語(yǔ)法為 ALTER PROCEDURE ; =OUTPUT AS 例例16 修改存儲(chǔ)過(guò)程修改存儲(chǔ)過(guò)程“雇員查詢(xún)雇員查詢(xún)”,用來(lái),用來(lái)統(tǒng)計(jì)某一職務(wù)雇員的總?cè)藬?shù)統(tǒng)計(jì)某一職務(wù)雇員的總?cè)藬?shù) 運(yùn)行存儲(chǔ)過(guò)程運(yùn)行存儲(chǔ)過(guò)程 運(yùn)行存儲(chǔ)過(guò)程的語(yǔ)法為 EXECUTE 存
19、儲(chǔ)過(guò)程名存儲(chǔ)過(guò)程名形參形參=實(shí)參值實(shí)參值|變量變量OUTPUT|DEFAULT說(shuō)明:說(shuō)明:1)“形參形參”是創(chuàng)建存儲(chǔ)過(guò)程時(shí)定義的形參名;是創(chuàng)建存儲(chǔ)過(guò)程時(shí)定義的形參名;2)“實(shí)參值實(shí)參值”是輸入?yún)?shù)的值;是輸入?yún)?shù)的值;3)“變量變量”表示用來(lái)保存參數(shù)或者返回參數(shù)的變量;表示用來(lái)保存參數(shù)或者返回參數(shù)的變量;OUTPUT表示表示指定參數(shù)為返回參數(shù);指定參數(shù)為返回參數(shù);4)DEFAULT表示使用該參數(shù)的默認(rèn)值作為實(shí)參。表示使用該參數(shù)的默認(rèn)值作為實(shí)參。5)如有多個(gè)參數(shù),可依次按以上參數(shù)定義規(guī)則列出,用逗號(hào)如有多個(gè)參數(shù),可依次按以上參數(shù)定義規(guī)則列出,用逗號(hào)“,”隔隔開(kāi)。開(kāi)。調(diào)用存儲(chǔ)過(guò)程調(diào)用存儲(chǔ)過(guò)程pro
20、c_Courseproc_Course的語(yǔ)句為:的語(yǔ)句為:EXEC EXEC proc_Courseproc_Course調(diào)用存儲(chǔ)過(guò)程調(diào)用存儲(chǔ)過(guò)程proc_SearchStudentproc_SearchStudent,查詢(xún)查詢(xún)0510110105101101學(xué)生的選課情況。學(xué)生的選課情況。EXEC EXEC proc_SearchStudentproc_SearchStudent 05101101 05101101或或EXEC proc_ EXEC proc_ SearchStudentSearchStudent scodescode=05101101=05101101采用采用“參數(shù)參數(shù)=值
21、值”的形的形式,各個(gè)參數(shù)的順序式,各個(gè)參數(shù)的順序可以任意排列可以任意排列。實(shí)參順序和定義時(shí)實(shí)參順序和定義時(shí)的參數(shù)順序一致。的參數(shù)順序一致?!纠纠?717】在在SchoolSchool中創(chuàng)建一個(gè)的存儲(chǔ)過(guò)程中創(chuàng)建一個(gè)的存儲(chǔ)過(guò)程proc_SearchStudentAvgGradeproc_SearchStudentAvgGrade,查詢(xún)某個(gè)學(xué)生的選課數(shù)目查詢(xún)某個(gè)學(xué)生的選課數(shù)目和平均成績(jī)和平均成績(jī)。CREATE PROC CREATE PROC proc_SearchStudentAvgGradeproc_SearchStudentAvgGrade stcodestcode char(8), cha
22、r(8), stcountstcount intint OUTPUT,stavgOUTPUT,stavg intint OUTPUT OUTPUTASASSELECT SELECT stcountstcount= =COUNT(T_Grade.StudentCode),stavgCOUNT(T_Grade.StudentCode),stavg= =AVG(T_Grade.GradeAVG(T_Grade.Grade) )FROM FROM T_GradeT_GradeWHERE WHERE T_Grade.StudentCodeT_Grade.StudentCode=stcodestcodeG
23、ROUP BY GROUP BY T_Grade.StudentCodeT_Grade.StudentCode調(diào)用存儲(chǔ)過(guò)程調(diào)用存儲(chǔ)過(guò)程proc_SearchStudentAvgGradeproc_SearchStudentAvgGrade,查詢(xún)查詢(xún)0510110105101101學(xué)生的選課數(shù)目和平均成績(jī)學(xué)生的選課數(shù)目和平均成績(jī)。DECLARE DECLARE scountscount intint , ,savgsavg intint EXECEXEC proc_SearchStudentAvgGradeproc_SearchStudentAvgGrade 05101101,scount 05
24、101101,scount OUTPUT,savgOUTPUT,savg OUTPUT OUTPUT PRINT PRINT 學(xué)生學(xué)生+ 05101101+ 05101101+的選課數(shù)目為的選課數(shù)目為+CAST(scountCAST(scount AS AS char(2)+char(2)+門(mén)門(mén) PRINT PRINT 學(xué)生學(xué)生+ 05101101+ 05101101+的平均成績(jī)?yōu)榈钠骄煽?jī)?yōu)?STR(savg,5,2)+STR(savg,5,2)+分分 刪除存儲(chǔ)過(guò)程刪除存儲(chǔ)過(guò)程 刪除存儲(chǔ)過(guò)程的語(yǔ)法為 Drop Procedure 游標(biāo)游標(biāo)l問(wèn)題要對(duì)查詢(xún)結(jié)果進(jìn)行一行行的操作,如何做到? 游游標(biāo)
25、標(biāo)引引例例以前:使用SELECT語(yǔ)句對(duì)表格進(jìn)行查詢(xún),返回的結(jié)果集包括所有滿(mǎn)足條件的行。思考:如果要求每次只顯示表格(例如上面的Course表)中的一行,該如何處理?這在將T-SQL嵌入到其他高級(jí)語(yǔ)言(如C、VC、Delphi等)的編程中經(jīng)常用到。 游標(biāo)概述游標(biāo)概述l可以將游標(biāo)看作一種特殊的指針,它可以指向與它相關(guān)聯(lián)的結(jié)果集中的任意一行,以便對(duì)當(dāng)前位置的行進(jìn)行處理。l游標(biāo)提供了對(duì)一個(gè)結(jié)果集進(jìn)行逐行處理的能力:1.在結(jié)果集中定位特定行2.從結(jié)果集的當(dāng)前位置檢索行3.支持對(duì)結(jié)果集中當(dāng)前位置的行進(jìn)行數(shù)據(jù)處理(修改/刪除)使用游標(biāo)的步驟使用游標(biāo)的步驟l聲明游標(biāo)l打開(kāi)游標(biāo)l處理數(shù)據(jù)(讀取/修改/刪除)可以
26、和其他T-SQL語(yǔ)句配合靈活使用l關(guān)閉游標(biāo)(與打開(kāi)游標(biāo)配對(duì))l刪除游標(biāo)(與聲明游標(biāo)配對(duì),此時(shí)釋放分配給游標(biāo)的所有資源)【問(wèn)題】游標(biāo)基本使用的例子相關(guān)語(yǔ)法格式相關(guān)語(yǔ)法格式l聲明游標(biāo)DECLARE cursor_name CURSORDECLARE cursor_name CURSORFORWORD_ONLY|SCROLLFORWORD_ONLY|SCROLLFOR select_statementsFOR select_statementsl打開(kāi)游標(biāo)OPEN cursor_nameOPEN cursor_namel使用游標(biāo)FETCH NEXT|PRIOR|FIRST|LASTFETCH NEXT
27、|PRIOR|FIRST|LASTFROM cursor Into variable_nameFROM cursor Into variable_namel關(guān)閉游標(biāo)CLOSE cursor_nameCLOSE cursor_namel刪除游標(biāo)DEALLOCATION cursor_nameDEALLOCATION cursor_name如果遍歷整個(gè)結(jié)果集?如果遍歷整個(gè)結(jié)果集?l使用fetch_status:l該全局變量/配置函數(shù)返回被最后FETCH語(yǔ)句執(zhí)行的游標(biāo)的狀態(tài),返回類(lèi)型為int:1.0:FETCH語(yǔ)句成功2.1:FETCH語(yǔ)句失敗或此行不在結(jié)果集中3.2:被提取的行不存在USE mas
28、terGOCREATE PROCEDURE sp_BuildIndexesASDECLARE TableName sysname, msg varchar(100), cmd varchar(100)DECLARE table_cur CURSOR FORSELECT name FROM sysobjects WHERE type=uOPEN table_curFETCH NEXT FROM table_cur INTO TableNameWHILE fetch_status = 0BEGINIF fetch_status = -2CONTINUESELECT msg = “Building
29、indexes for table”+TableName+”P(pán)RINT msgSELECT cmd = “DBCC DBREINDEX (”+TableName+”)”EXEC (cmd)PRINT “ “FETCH NEXT FROM table_cur INTO TableNameENDDEALLOCATE table_curGO觸發(fā)器觸發(fā)器l定義在表上的一個(gè)對(duì)象l一種特殊類(lèi)型的存儲(chǔ)過(guò)程l不需要專(zhuān)門(mén)語(yǔ)句調(diào)用,通過(guò)事件進(jìn)行觸發(fā)而被執(zhí)行l(wèi)當(dāng)執(zhí)行insert、delete和update語(yǔ)句時(shí)自動(dòng)被觸發(fā)執(zhí)行l(wèi)觸發(fā)器可以在有數(shù)據(jù)操作時(shí)自動(dòng)強(qiáng)制執(zhí)行某些業(yè)務(wù)規(guī)則l觸發(fā)器執(zhí)行的內(nèi)容可以是報(bào)警、維護(hù)數(shù)據(jù)的完
30、整性、特殊的數(shù)據(jù)處理l觸發(fā)器可以用于完整性檢查,但比約束、默認(rèn)值、規(guī)則等功能強(qiáng)大、靈活lSQL Server的兩種觸發(fā)器: (1)AFTER觸發(fā)器:數(shù)據(jù)被修改后觸發(fā),對(duì)變動(dòng)的數(shù)據(jù)進(jìn)行檢查。(2)INSTEAD OF觸發(fā)器:數(shù)據(jù)修改之前被觸發(fā),并取代修改數(shù)據(jù)的操作,轉(zhuǎn)去執(zhí)行觸發(fā)器定義的操作。例如,執(zhí)行完下面的語(yǔ)句后:例如,執(zhí)行完下面的語(yǔ)句后: CREATE TRIGGER tri_StudentInsDel ON dbo.T_Student FOR INSERT, DELETE AS SELECT * FROM T_Student 當(dāng)對(duì)表當(dāng)對(duì)表T_Student的數(shù)據(jù)進(jìn)行插入或刪除操的數(shù)據(jù)進(jìn)行插
31、入或刪除操作時(shí),觸發(fā)器作時(shí),觸發(fā)器“tri_StudentUpdate”將會(huì)自動(dòng)執(zhí)行。將會(huì)自動(dòng)執(zhí)行。創(chuàng)建觸發(fā)器創(chuàng)建觸發(fā)器 創(chuàng)建觸發(fā)器時(shí)提供:觸發(fā)器名稱(chēng)、定義觸發(fā)器的表、觸發(fā)器觸發(fā)事件、數(shù)據(jù)修改語(yǔ)句。創(chuàng)建觸發(fā)器的語(yǔ)法為CREATE TRIGGER 觸發(fā)器名觸發(fā)器名ON 表名表名|視圖名視圖名FOR INSERT,UPDATE,DELETEASSQL語(yǔ)句段語(yǔ)句段一個(gè)觸發(fā)器只能用于一個(gè)表兩個(gè)特殊的邏輯表:inserted、deleted例例1818 利用觸發(fā)器來(lái)保證利用觸發(fā)器來(lái)保證期刊采編系統(tǒng)數(shù)據(jù)庫(kù)中期刊采編系統(tǒng)數(shù)據(jù)庫(kù)中mag_infomag_info表的參照完整性表的參照完整性 【例【例1919】在在SchoolSchool數(shù)據(jù)庫(kù)的數(shù)據(jù)庫(kù)的T_StudentT_Student表上創(chuàng)建一個(gè)觸發(fā)器表上創(chuàng)建一個(gè)觸發(fā)器tri_StudentCodeUpdatetri_StudentCodeUpdate,當(dāng)對(duì)學(xué)號(hào)列進(jìn)行修改時(shí),給出提示信息并當(dāng)對(duì)學(xué)號(hào)列進(jìn)行修改時(shí),給出提示信息并取消修改操作。取消修改操作。 CREATE TRIGGER CREATE TRIGGER tri_StudentCodeUpdatetri_StudentCodeUpdateON ON T_StudentT_StudentFOR UPDATEFOR UPDATEAS
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 財(cái)務(wù)信息保密及第三方審計(jì)協(xié)議
- 智能辦公系統(tǒng)與辦公室裝修一體化項(xiàng)目合同
- 收養(yǎng)協(xié)議書(shū)范本范文
- 賣(mài)公司協(xié)議書(shū)范本
- 研發(fā)中心場(chǎng)地租賃保證金技術(shù)轉(zhuǎn)移轉(zhuǎn)化協(xié)議
- 創(chuàng)業(yè)公司財(cái)務(wù)總監(jiān)股權(quán)分配及風(fēng)險(xiǎn)控制聘用合同
- 河道渣土清運(yùn)協(xié)議書(shū)范本
- 美國(guó)出口貨物貨運(yùn)代理合同范本
- 機(jī)場(chǎng)擴(kuò)建征地拆遷補(bǔ)償協(xié)議書(shū)
- 企業(yè)并購(gòu)重組稅務(wù)處理與咨詢(xún)服務(wù)合同
- 中國(guó)傳統(tǒng)禮儀全課件
- 新北師大版七年級(jí)下冊(cè)生物教案全冊(cè)
- 饋線(xiàn)自動(dòng)化-集中型饋線(xiàn)自動(dòng)化(配電自動(dòng)化)
- 《膽腸吻合技術(shù)》課件
- 圍手術(shù)期患者疼痛管理課件
- 2024年度-2025年度XX村第三輪土地延包工作總結(jié)
- 2025年江蘇新海連發(fā)展集團(tuán)有限公司招聘筆試參考題庫(kù)含答案解析
- 低碳航空器結(jié)構(gòu)設(shè)計(jì)-深度研究
- 雙重預(yù)防機(jī)制建設(shè)方案
- 2025山東產(chǎn)權(quán)交易中心招聘21人易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 《煤礦運(yùn)輸系統(tǒng)課件》課件
評(píng)論
0/150
提交評(píng)論