第9章SQLSERVER的程序設(shè)計(jì)_第1頁
第9章SQLSERVER的程序設(shè)計(jì)_第2頁
第9章SQLSERVER的程序設(shè)計(jì)_第3頁
第9章SQLSERVER的程序設(shè)計(jì)_第4頁
第9章SQLSERVER的程序設(shè)計(jì)_第5頁
已閱讀5頁,還剩69頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第9章SQLSERVER編程,第9章SQLSERVER編程,SQLSERVER數(shù)據(jù)庫應(yīng)用技術(shù),第9章SQL Server編程,本章主要內(nèi)容,9.1批處理和進(jìn)程控制9.2事務(wù)處理9.3鎖定機(jī)制9.4游標(biāo),第9章SQL Server編程,9.1批處理和進(jìn)程控制,通常,服務(wù)器端程序是用SQL語句編寫的。一般來說,服務(wù)器端程序由以下部分組成:33,360個批處理注釋變量,用于在程序中改變批處理中語句的執(zhí)行順序,過程控制語言錯誤和消息處理,第9章SQLSERVER的編程,9.1批處理和過程控制,1。批處理是單個或多個Transact-SQL語句的集合,由用戶或應(yīng)用程序一次發(fā)送到SQL Server,以解

2、釋和執(zhí)行批處理中的所有語句指令。設(shè)置一個批處理就像編寫SQL語句,但是不同的是多個語句同時(shí)執(zhí)行,并且GO語句被用作一個批處理的結(jié)束。第9章SQLSERVER的編程,1。批處理,使用批處理時(shí)的一些限制: 1。大多數(shù)創(chuàng)建命令應(yīng)該在單個批處理中執(zhí)行,但是創(chuàng)建數(shù)據(jù)庫,創(chuàng)建表和創(chuàng)建索引的例外2。使用set語句更改的選項(xiàng)在第3批結(jié)束時(shí)生效。您不能在同一批中更改一個表,然后立即引用它的新列。第9章,SQLSERVER的編程,示例9.1批處理示例,使用學(xué)生開始創(chuàng)建視圖教師信息視圖作為選擇教師標(biāo)識、姓名、技術(shù)職稱、教師工資信息開始選擇*從教師信息視圖開始,創(chuàng)建視圖必須是批處理中唯一的語句。1.批處理,第9章,S

3、QLSERVER的編程,示例9.2錯誤示例,使用學(xué)生轉(zhuǎn)到創(chuàng)建視圖研究_信息_視圖作為選擇研究_ id,名稱從研究_信息插入到研究_信息_視圖值(050910211,黃明)轉(zhuǎn)到,1。批處理,第9章SQLSERVER的編程,示例9.3無效的批處理,聲明研究_變量int go選擇研究_變量=25 go打印研究_變量go,1。批處理,第9章SQLSERVER編程,2。過程控制。當(dāng)使用T-SQL語言編程時(shí),經(jīng)常使用各種過程控制語句來執(zhí)行諸如順序、分支控制轉(zhuǎn)移和循環(huán)等操作。T-SQL提供了一組流控制語句,包括條件控制語句、無條件轉(zhuǎn)移語句、循環(huán)語句和向調(diào)用例程返回狀態(tài)值的語句。1.BEGINEND語句塊2。

4、IFELSE語句3。案例表達(dá)式4。WHILE語句5。WAITFOR語句6。GOTO語句7。RETURN語句。第9章SQLSERVER的編程,2。流控制-begin id,其語法如下:BEgin命令行|塊END BEGINEND用于設(shè)置一個塊,BEgin id中的所有程序都被視為一個單元來執(zhí)行。BEGINEND常用于條件語句(如IFELSE)或控制流的語句(如循環(huán))。您可以在BEGINEND中嵌套另一個BEGINEND來定義另一個程序塊。第9章,SQLSERVER的編程,2。過程控制if ELSE,IF ELSE語句用于實(shí)現(xiàn)選擇結(jié)構(gòu),其語法格式如下: IF(條件表達(dá)式)命令行|塊ELse命令行或

5、塊,其中:可以是各種表達(dá)式的組合,但表達(dá)式的值必須是邏輯值“真”或“假”。ELSE子句是可選的,最簡單的IF語句沒有ELSE子句。IFELSE用于判斷某個條件成立時(shí)某個程序是否被執(zhí)行,條件不成立時(shí)另一個程序是否被執(zhí)行。如果不使用塊,IF或ELSE只能執(zhí)行一個命令。IF ELSE最多可嵌套32層。,第9章SQLSERVER的程序設(shè)計(jì),2。過程控制-如果否則,示例9.4,如果(從左側(cè)(螺柱_ id,8)=04010101的螺柱_等級中選擇平均值(等級)=60開始打印通過結(jié)束,第9章,SQLSERVER的編程,第二部分。過程控制如果不是這樣,例9.5據(jù)統(tǒng)計(jì),如果2004級計(jì)算機(jī)應(yīng)用技術(shù)專業(yè)02班學(xué)生

6、人數(shù)少于5人,則在數(shù)據(jù)表stud_info中插入新的學(xué)生記錄。如果(p _ total5)插入學(xué)習(xí)信息值(0401010245,謝背光,05-14-1986,男,廣東省湛江市,514020,565)結(jié)束,第9章,SQLSERVER的編程,第二部分,則從左側(cè)的學(xué)習(xí)信息中選擇p _ total=計(jì)數(shù)(*)。過程控制示例9.5在學(xué)習(xí)信息表中,查找1986年出生的學(xué)生的平均入學(xué)分?jǐn)?shù)。如果大于560,這些人的入學(xué)分?jǐn)?shù)將減少5分。聲明x int begin從stud_info中選擇x=avg(標(biāo)記),其中year(生日)=1986 if(x560)update stud _ info set mark=m

7、ark-5,其中year(生日)=1986 end,第9章,SQLSERVER的程序設(shè)計(jì),2。過程控制-如果沒有,則示例9.6從數(shù)據(jù)表stud_grade中讀出學(xué)生的陳紅分?jǐn)?shù),并將百分制轉(zhuǎn)換為成績系統(tǒng)顯示。聲明分?jǐn)?shù)數(shù)字(4,1),步驟字符(1)開始選擇分?jǐn)?shù)=等級從stud _ grade其中名稱=陳紅如果(分?jǐn)?shù)=90和分?jǐn)?shù)=80)設(shè)置步驟=b否則如果(分?jǐn)?shù)=70)設(shè)置步驟=c否則如果(分?jǐn)?shù)=60)設(shè)置步驟=d否則設(shè)置步驟=e打印步驟結(jié)束,第9章,SQLSERVER的編程,2。過程控制- CASE表達(dá)式,CASE函數(shù)可以計(jì)算多個條件表達(dá)式并返回一個合格的結(jié)果表達(dá)式。CASE函數(shù)可以根據(jù)不同的使用

8、形式分為簡單CASE表達(dá)式和搜索CASE表達(dá)式?!咀⑨尅? .當(dāng)執(zhí)行CASE子句時(shí),將只運(yùn)行第一個匹配的子句。2.CASE表達(dá)式不是語句,不能單獨(dú)執(zhí)行,只能作為語句的一部分使用。第9章,SQLSERVER的編程,2。過程控制-案例表達(dá)式,1。簡單案例表達(dá)式將測試表達(dá)式與一組簡單表達(dá)式進(jìn)行比較,如果簡單表達(dá)式的值等于測試表達(dá)式的值,則返回相應(yīng)結(jié)果表達(dá)式的值。其語法格式如下:CASE測試表達(dá)式當(dāng)測試值為1時(shí),則結(jié)果表達(dá)式為1.當(dāng)測試值然后結(jié)果表達(dá)式n否則結(jié)果表達(dá)式m結(jié)束,第9章編程的SQLSERVER,2。過程控制-案例表達(dá)式示例9.7,從學(xué)生表stud_info中,選擇study _ id和ge

9、nder,如果gender為“男性”,則輸出,選擇stud _ id,gender=CASE gender當(dāng)男性時(shí),然后M當(dāng)女性時(shí),然后F從stud_info中結(jié)束,第9章,SQLSERVER的編程,2。過程控制-案例表達(dá)式,2。搜索條件表達(dá)式與簡單表達(dá)式的不同之處在于,在搜索表達(dá)式中,在case關(guān)鍵字之后沒有表達(dá)式,但是在每個WHEN關(guān)鍵字之后都有邏輯表達(dá)式。其語法格式如下:案例當(dāng)邏輯表達(dá)式1然后結(jié)果表達(dá)式1當(dāng)邏輯表達(dá)式n然后結(jié)果表達(dá)式n否則結(jié)果表達(dá)式m結(jié)束,第9章,SQLSERVER的編程。2.過程控制-案例表達(dá)式,示例9.8從學(xué)習(xí)成績表中查詢所有學(xué)生的選修成績。如果結(jié)果為空,他們將輸出“

10、失敗”,“失敗”當(dāng)?shù)陀?0分,“通過”當(dāng)60分到70分,“好”當(dāng)70分到90分,“優(yōu)秀”當(dāng)大于或等于90分,選擇stud _ id,名稱,分?jǐn)?shù)=當(dāng)?shù)燃墳榭諘r(shí)的情況,然后當(dāng)?shù)燃?60且等級=70且等級=90時(shí)失敗,然后優(yōu)秀結(jié)束于stud_grade,第9章編程的SQLSERVER,2。過程控制- WHILE語句,其語法如下:WHILE(條件表達(dá)式)BEGIN命令行或塊BREAK CONTINUE命令行或塊END WHILE命令將在設(shè)置的條件成立時(shí)重復(fù)執(zhí)行命令行或塊。CONTINUE命令允許程序跳過CONTINUE命令后的語句,返回WHILE循環(huán)的第一行,并繼續(xù)下一個循環(huán)?!爸袛唷泵钍钩绦蛲耆?/p>

11、出循環(huán),并結(jié)束“同時(shí)”命令的執(zhí)行。WHILE語句也可以嵌套。第9章,SQLSERVER的編程,2。過程控制- while語句,示例9.9以下程序計(jì)算1100之間可被3整除的所有數(shù)字的數(shù)目和總和。聲明x smallint,y smallint,nums smallint集合x=0集合y=1集合nums=0而(y=100)開始如果(y%3=0)開始集合x=x y集合nums=nums 1結(jié)束集合y=y 1結(jié)束打印字符串(x),字符串(nums),第9章,SQLSERVER的編程,2。流控制-等待,其語法如下:等待等待延遲|時(shí)間等待命令用于暫時(shí)停止程序執(zhí)行,直到設(shè)置的等待時(shí)間過去或設(shè)置的時(shí)間已經(jīng)過期

12、。其中時(shí)間必須是日期時(shí)間類型的數(shù)據(jù),但不能包含日期。每個關(guān)鍵字的含義如下:1延時(shí):用于設(shè)置等待時(shí)間,最長24小時(shí);2時(shí)間:用于設(shè)置等待結(jié)束的時(shí)間點(diǎn);第九章,SQLSERVER的編程;2.過程控制-等待;示例9.10在執(zhí)行SELECT語句之前,等待1小時(shí)2分3秒。示例在執(zhí)行SELECT語句之前,請等到下午15: 08。等待延遲01:023:03從stud _ info中選擇*,等待時(shí)間15:38:00從stud _ info中選擇*,第9章編程SQLSERVER,2。過程控制- goto,goto語句是一個無條件轉(zhuǎn)移語句,其語法格式是:GOTO標(biāo)識符GOTO命令用來改變程序的執(zhí)行流程,使程序跳轉(zhuǎn)

13、到指定的標(biāo)有標(biāo)識符的程序行,然后繼續(xù)執(zhí)行。作為跳轉(zhuǎn)目標(biāo)的標(biāo)識符可以是數(shù)字和字符的組合。但它必須以“:”結(jié)尾。在GOTO命令行上,標(biāo)識符后面不需要跟“:”、第9章、SQLSERVER編程和第2章。過程控制-轉(zhuǎn)到示例9.11找到123100的和。聲明sum smallint,I small int set I=1 set sum=0 beg :如果(i=100)開始set sum=sum I;設(shè)置i=i 1轉(zhuǎn)到請求結(jié)束打印總和,第9章,SQLSERVER的程序設(shè)計(jì),2。流控制- RETURN,語法如下:RETURN(整數(shù)值)RETURN命令用于結(jié)束當(dāng)前程序的執(zhí)行,并返回到調(diào)用它或其他程序的最后一個

14、程序。您可以在括號中指定返回值。如果沒有指定返回值,系統(tǒng)會根據(jù)程序執(zhí)行的結(jié)果返回一個默認(rèn)值,如下圖所示:如果運(yùn)行過程中有多個錯誤,系統(tǒng)會返回絕對值最大的值;如果返回值是由用戶在此時(shí)定義的,那么將返回用戶定義的值。RETURN語句不能返回空值。0程序成功執(zhí)行-1找不到對象-2數(shù)據(jù)類型錯誤-3死鎖-4權(quán)限沖突-5語法錯誤-6由用戶引起的一般錯誤-7資源錯誤,如磁盤空間不足-8非致命內(nèi)部錯誤-9達(dá)到系統(tǒng)限制-10 -11致命內(nèi)部不一致錯誤-12表或指針損壞-13數(shù)據(jù)庫損壞-14硬錯誤,第9章,SQLSERVER編程,9.2事務(wù)處理,1。交易概述2。交易管理。交易模式4。事務(wù)日志,第9章,SQLSERVER編程,1。事務(wù)概述,事務(wù)由一系列對數(shù)據(jù)庫的查詢操作和更新操作組成。事務(wù)是在數(shù)據(jù)庫系統(tǒng)中執(zhí)行的工作單元,它是由用戶定義的一組操作序列。一個事務(wù)可以是一組SQL語句、一條SQL語句或整個程序,一個應(yīng)用程序可以包含多個事務(wù)。交易的開始和結(jié)束可以由用戶明確控制。如果用戶沒有明確定義事務(wù),數(shù)據(jù)庫管理系統(tǒng)會根據(jù)默認(rèn)規(guī)則自動劃分事務(wù)。在SQL語言中,有三種語句來定義事務(wù):第9章,SQLSERVER的編程;1.事務(wù)概述

溫馨提示

  • 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

提交評論