Transact-SQL流程控制語句_第1頁
Transact-SQL流程控制語句_第2頁
Transact-SQL流程控制語句_第3頁
Transact-SQL流程控制語句_第4頁
Transact-SQL流程控制語句_第5頁
已閱讀5頁,還剩21頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、Transact-SQL流控制語句局部變量和全局變量局部變量和全局變量 l局部變量是在批或存儲過程中聲明使用的。l全局變量是SQL Server提供的特殊函數(shù) 。l聲明局部變量:ldeclare 變量名 數(shù)據(jù)類型,.nl局部變量賦值: lselect 變量名=表達(dá)式lset 變量名=表達(dá)式程序控制語句程序控制語句1 BEGIN.END語句l相當(dāng)于C語言中的大括號或復(fù)合語句,它將多條T-SQL語句封裝成為一個(gè)整體的語句塊。通常把BEGIN.END語句放在語句IF.ElSE或者WHILE中,使其中的語句作為一個(gè)整體來執(zhí)行。 BEGIN T-SQL語句塊 ENDlT-SQL中可以使用嵌套的BEGIN

2、.END語句。2 PRINT語句l用于將用戶定義的消息返回到客戶端。PRINT 字符文本| local_variable| global_variable| string_expr 3 IF.ELSE語句l選擇結(jié)構(gòu),用于進(jìn)行條件判斷,它可以進(jìn)行批處理、存儲過程或特殊查詢,并且可以嵌套使用。 IF 布爾表達(dá)式 sql語句|語句塊 ElSE sql語句|語句塊 布爾表達(dá)式中可以含有select語句,必須用圓括號將select語句括起來。例例- IF.ELSE語句語句if (select count(*) from T_opt,T_lesson where and T_opt.Lid=T_lesso

3、n.Lid and lname=數(shù)據(jù)庫原理 and score80)0begin print 數(shù)據(jù)庫原理課程的分?jǐn)?shù)低于80分! select s.sid, s.sname,o.score from T_student s join T_opt g on s.sid=o.sid join T_lesson l on l.Lid=o.Lid where o.score80 and l.lname=數(shù)據(jù)庫原理endelseprint 數(shù)據(jù)庫原理課程的分?jǐn)?shù)均高于80分4 CASE語句l多分支條件語句 CASE WHEN 條件1 THEN 值1 WHEN 條件2 THEN 值2 . END例:根據(jù)課時(shí)確

4、定學(xué)分例:根據(jù)課時(shí)確定學(xué)分declare lclasses intdeclare lgrade intset lclasses=64-select lclasses=lclasses from T_lesson where Lid=01set lgrade=casewhen lclasses=32 then 2when lclasses =64 then 4when lclasses =80 then 5endprint lgrade例:根據(jù)成績確定級別例:根據(jù)成績確定級別select Sid as 學(xué)號, level=casewhen score60 and score80 then per

5、fectendfrom T_opt where Lid=111015 WHILE語句l條件循環(huán)語句,在滿足條件時(shí)執(zhí)行循環(huán)體,不滿足條件時(shí)跳出循環(huán)結(jié)構(gòu)。lWHILE語句可以嵌套執(zhí)行。 WHILE 布爾表達(dá)式 sql語句|語句塊 lCONTINUE語句:使程序跳過CONTINUE語句后面的語句,回到WHILE循環(huán)的第一行命令。lBREAK語句:使程序完全跳出循環(huán),結(jié)束WHILE語句的執(zhí)行。 例:打印從例:打印從1到到4這這4個(gè)數(shù)字個(gè)數(shù)字declare i intset i=0while(i4)beginset i=i+1print iend打印乘法口訣表打印乘法口訣表declare i int,j

6、 intset i=1set j=1while(i=9)beginwhile(j10beginprint var1returnendelsegoto Here8 WAITFOR語句l指定觸發(fā)語句塊、存儲過程或事務(wù)執(zhí)行的時(shí)間、時(shí)間間隔或事件。 lWAITFOR delay:延遲(時(shí)間間隔)執(zhí)行后面的語句lWAITFOR time:指定語句執(zhí)行的時(shí)間l時(shí)間格式:hh:mm:ss等待1小時(shí)零分零12秒后執(zhí)行select語句 WAITFOR delay 01:00:12 Select * from T_studentl最長延遲時(shí)間24小時(shí)等到11點(diǎn)30分后才執(zhí)行select 語句 WAITFOR ti

7、me 11:30:00 Slect * from T_student 按datetime格式賦值,不能指定日期游標(biāo)游標(biāo)l1 定義l定義一個(gè)游標(biāo)標(biāo)識名,并把游標(biāo)標(biāo)識名和一個(gè)查詢語句關(guān)聯(lián)起來。l用DECLARE語句聲明游標(biāo),通過SELECT查詢定義游標(biāo)存儲的數(shù)據(jù)集合。l語句格式為: DECLARE 游標(biāo)名稱 INSENSITIVE SCROLL CURSOR FOR select 語句 FORREAD ONLY|UPDATEOF 列名字表 游標(biāo)游標(biāo)l參數(shù)說明:lINSENSITIVE選項(xiàng):說明所定義的游標(biāo)使用SELECT語句查詢結(jié)果的拷貝,對游標(biāo)的操作都基于該拷貝進(jìn)行。因此,這期間對游標(biāo)基本表的數(shù)

8、據(jù)修改不能反映到游標(biāo)中。這種游標(biāo)也不允許通過它修改基本表的數(shù)據(jù)。 lSCROLL選項(xiàng):指定該游標(biāo)可用所有的游標(biāo)數(shù)據(jù)定位方法提取數(shù)據(jù),游標(biāo)定位方法包括PRIOR、FIRST、LAST、ABSOLUTE n 和RELATIVE n 選項(xiàng)。游標(biāo)游標(biāo)l參數(shù)說明:lSelect語句:為標(biāo)準(zhǔn)的SELECT查詢語句,其查詢結(jié)果為游標(biāo)的數(shù)據(jù)集合,構(gòu)成游標(biāo)數(shù)據(jù)集合的一個(gè)或多個(gè)表稱作游標(biāo)的基表。 在游標(biāo)聲明語句中,有下列條件之一時(shí),系統(tǒng)自動(dòng)把游標(biāo)定義為INSENSITIVE游標(biāo): SELECT語句中使用了DISTINCT、UNION、 GROUP BY或HAVING等關(guān)鍵字; 任一個(gè)游標(biāo)基表中不存在唯一索引。 l

9、READ ONLY選項(xiàng):說明定義只讀游標(biāo)。 lUPDATE OF 列名表選項(xiàng):定義游標(biāo)可修改的列。如果使用OF 列名表選項(xiàng),說明只允許修改所指定的列,否則,所有列均可修改。 游標(biāo)游標(biāo)l例如,定義游標(biāo)TCURSOR,關(guān)聯(lián)課程名字及相應(yīng)選課的學(xué)生:declare Tcursor cursor forselect k_name,sidfrom course,scorewhere course.kid=score.kid游標(biāo)游標(biāo)l2 打開l打開游標(biāo)語句執(zhí)行游標(biāo)定義中的查詢語句,查詢結(jié)果存放在游標(biāo)緩沖區(qū)中。并使游標(biāo)指針指向游標(biāo)區(qū)中的第一個(gè)元組,作為游標(biāo)的缺省訪問位置。l打開游標(biāo)的語句格式: EXEC S

10、QL OPEN 游標(biāo)名 如果打開的游標(biāo)為INSENSITIVE游標(biāo),在打開時(shí)將產(chǎn)生一個(gè)臨時(shí)表,將定義的游標(biāo)數(shù)據(jù)集合從其基表中拷貝過來。 游標(biāo)游標(biāo)l3 讀游標(biāo)區(qū)中的元組lFETCH NEXT|PRIOR|FIRST|LAST| ABSOLUTE n| RELATIVE n FROM 游標(biāo)名 INTO 變量1, 變量2, . 游標(biāo)游標(biāo)l3 讀游標(biāo)區(qū)中的元組lNEXT:讀取游標(biāo)中的下一行,第一次對游標(biāo)實(shí)行讀取操作時(shí),NEXT返回結(jié)果集合中的第一行。 lPRIOR、FIRST、LAST、ABSOLUTE n 和RELATIVE n 選項(xiàng)只適用于SCROLL游標(biāo)。它們分別說明讀取游標(biāo)中的上一行、第一行、

11、最后一行、第n 行和相對于當(dāng)前位置的第n 行。n 為負(fù)值時(shí),ABSOLUTE n 和RELATIVE n 說明讀取從游標(biāo)結(jié)果集合中的最后一行或當(dāng)前行倒數(shù)n行的數(shù)據(jù)。 lINTO子句 說明將讀取的數(shù)據(jù)存放到指定的局部變量中,每一個(gè)變量的數(shù)據(jù)類型應(yīng)與游標(biāo)所返回的數(shù)據(jù)類型嚴(yán)格匹配,否則將產(chǎn)生錯(cuò)誤。游標(biāo)游標(biāo)l4. 利用游標(biāo)修改數(shù)據(jù)l通過游標(biāo)修改或刪除游標(biāo)基表中的當(dāng)前數(shù)據(jù)行。 UPDATE語句的格式為: UPDATE table_name SET 列名=表達(dá)式,n WHERE CURRENT OF cursor_name lDELETE語句的格式為: DELETE FROM table_name WHERE CURRENT OF cursor_name l說明: CURRENT OF cursor_name: 表示當(dāng)前游標(biāo)指針?biāo)傅漠?dāng)前行數(shù)據(jù)。CURRENT OF 只能在UPDATE和DELETE語句中使用。 游標(biāo)游標(biāo)l5. 關(guān)閉游標(biāo) l關(guān)閉游標(biāo)后,游標(biāo)區(qū)的數(shù)據(jù)不可再讀。lCLOSE語句關(guān)閉已打開的游標(biāo),之后不能對游標(biāo)進(jìn)行讀取等操作,但可以使用OPEN語

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論