數(shù)據(jù)庫(kù)技術(shù)及應(yīng)用(SQL Server )2.7_第1頁(yè)
數(shù)據(jù)庫(kù)技術(shù)及應(yīng)用(SQL Server )2.7_第2頁(yè)
數(shù)據(jù)庫(kù)技術(shù)及應(yīng)用(SQL Server )2.7_第3頁(yè)
數(shù)據(jù)庫(kù)技術(shù)及應(yīng)用(SQL Server )2.7_第4頁(yè)
數(shù)據(jù)庫(kù)技術(shù)及應(yīng)用(SQL Server )2.7_第5頁(yè)
已閱讀5頁(yè),還剩112頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

數(shù)據(jù)庫(kù)技術(shù)及應(yīng)用(SQLServer)教學(xué)單元2.7第9章

T-SQL編程基礎(chǔ)T-SQL編程基礎(chǔ)學(xué)習(xí)導(dǎo)航2T-SQL編程基礎(chǔ)知識(shí)框架3單元2.7T-SQL編程基礎(chǔ)能力目標(biāo)能夠正確應(yīng)用T-SQL的表達(dá)式能夠正確應(yīng)用T-SQL的程序控制語(yǔ)句能夠根據(jù)數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)的功能需求編寫(xiě)簡(jiǎn)單的T-SQL程序能夠閱讀并熟練書(shū)寫(xiě)常用數(shù)據(jù)類型、函數(shù)和控制語(yǔ)句(英文)4單元2.7T-SQL編程基礎(chǔ)知識(shí)目標(biāo)T-SQL基礎(chǔ)(有效標(biāo)識(shí)符、數(shù)據(jù)類型、注釋)表達(dá)式(常量、變量、函數(shù)、運(yùn)算符、小括號(hào))流程控制語(yǔ)句(順序、分支、循環(huán))CASE多分支表達(dá)式素質(zhì)目標(biāo)養(yǎng)成嚴(yán)謹(jǐn)、嚴(yán)格的軟件編程職業(yè)習(xí)慣進(jìn)一步加強(qiáng)自主學(xué)習(xí)的能力弘揚(yáng)中國(guó)計(jì)算機(jī)科學(xué)家艱苦卓絕的奮斗精神,樹(shù)立良好的作風(fēng)和學(xué)風(fēng)。*拓展閱讀9-1中國(guó)計(jì)算機(jī)軟件系統(tǒng)的開(kāi)創(chuàng)者5打好數(shù)據(jù)庫(kù)編程的基礎(chǔ)表達(dá)式應(yīng)用訓(xùn)練流程控制語(yǔ)句訓(xùn)練工作任務(wù)單元2.7T-SQL編程基礎(chǔ)6單元2.7T-SQL編程基礎(chǔ)7T-SQL基礎(chǔ)一表達(dá)式二流程控制語(yǔ)句三批處理四事務(wù)五一、T-SQL基礎(chǔ)8常見(jiàn)的對(duì)象(除數(shù)據(jù)庫(kù)對(duì)象)標(biāo)識(shí)符服務(wù)器實(shí)例、數(shù)據(jù)類型、變量、參數(shù)和函數(shù)等命名規(guī)則和數(shù)據(jù)庫(kù)對(duì)象的命名規(guī)則相同特殊符號(hào)開(kāi)頭的標(biāo)識(shí)符“@”開(kāi)頭:局部變量或是函數(shù)的參數(shù)“@@”開(kāi)頭:全局變量“#”開(kāi)頭:臨時(shí)表或是一個(gè)存儲(chǔ)過(guò)程“##”開(kāi)頭:全局的臨時(shí)數(shù)據(jù)庫(kù)對(duì)象。1.有效標(biāo)識(shí)符一、T-SQL基礎(chǔ)9多行注釋:“/*”和“*/”括起來(lái)可以連續(xù)書(shū)寫(xiě)多行的注釋語(yǔ)句例如:/*設(shè)置讀者編號(hào)RID為外鍵,刪除主鍵表行時(shí)級(jí)聯(lián)刪除從表相應(yīng)行*/單行注釋:“--”表示單行書(shū)寫(xiě)注釋語(yǔ)句例如:--聲明局部變量2.注釋一、T-SQL基礎(chǔ)10數(shù)據(jù)類型在數(shù)據(jù)結(jié)構(gòu)中的定義是一個(gè)值的集合以及定義在這個(gè)值集上的一組操作。在T-SQL中,表和視圖的列、局部變量、函數(shù)的參數(shù)和返回值、存儲(chǔ)過(guò)程的參數(shù)和返回值(具有返回代碼)和表達(dá)式等都具有相關(guān)的數(shù)據(jù)類型。3.數(shù)據(jù)類型一、T-SQL基礎(chǔ)11系統(tǒng)數(shù)據(jù)類型T-SQL常用的系統(tǒng)數(shù)據(jù)類型有常用的有bit、int、decimal[(p[,s])]、float[(n)]、datetime2、date、time、char[(n)]、nchar[(n)]、binary[(n)]和table等。(前有介紹)3.數(shù)據(jù)類型-系統(tǒng)一、T-SQL基礎(chǔ)12用戶定義數(shù)據(jù)類型以基本數(shù)據(jù)類型為基礎(chǔ)創(chuàng)建的別名數(shù)據(jù)類型,它提供一種更能清楚地說(shuō)明對(duì)象中值類型的名稱并將其應(yīng)用于數(shù)據(jù)類型的機(jī)制。3.數(shù)據(jù)類型-用戶定義一、T-SQL編程基礎(chǔ)13【例9-1】為數(shù)據(jù)庫(kù)“EDUC”定義一個(gè)基于char型的數(shù)據(jù)類型“StudentID”,用于說(shuō)明表中學(xué)號(hào)列的數(shù)據(jù)類型。在【對(duì)象資源管理器】窗口中:展開(kāi)“EDUC”→“可編程性”節(jié)點(diǎn),右擊“類型”節(jié)點(diǎn),從快捷菜單中選擇“新建”→“用戶定義數(shù)據(jù)類型”命令,打開(kāi)【新建用戶定義數(shù)據(jù)類型】窗口3.數(shù)據(jù)類型-用戶定義一、T-SQL基礎(chǔ)14在【新建用戶定義數(shù)據(jù)類型】窗口中:輸入類型名稱、數(shù)據(jù)類型等3.數(shù)據(jù)類型-用戶定義一、T-SQL基礎(chǔ)15在【對(duì)象資源管理器】窗口中:展開(kāi)數(shù)據(jù)庫(kù)下的“用戶定義類型節(jié)點(diǎn)”3.數(shù)據(jù)類型-查看用戶定義類型一、T-SQL基礎(chǔ)16在定義數(shù)據(jù)庫(kù)表“Student”或“SC”時(shí),可以用自定義數(shù)據(jù)類型“StudentID”指明學(xué)號(hào)“SID”的數(shù)據(jù)類型,3.數(shù)據(jù)類型-應(yīng)用用戶定義類型一、T-SQL基礎(chǔ)17在變量聲明中也可以應(yīng)用用戶自定義類型來(lái)定義內(nèi)存變量的類型的數(shù)據(jù)類型例:USEEDUCGODECLARE@StuIDStudentID3.數(shù)據(jù)類型-應(yīng)用用戶定義類型單元2.7T-SQL編程基礎(chǔ)18T-SQL編程基礎(chǔ)一表達(dá)式二流程控制語(yǔ)句三批處理四事務(wù)五

二、表達(dá)式19常量1變量2日期和時(shí)間類型表達(dá)式3內(nèi)置函數(shù)4運(yùn)算符5(一)常量20常量:也稱為文字值或標(biāo)量值,是表示一個(gè)特定數(shù)據(jù)值的符號(hào)常量的格式取決于它所表示值的數(shù)據(jù)類型日期型常量說(shuō)明:使用SETDATEFORMAT或SETLANGUAGE指定日期和時(shí)間常量的格式,注意這兩種設(shè)置方法只是影響如何把字符串轉(zhuǎn)換為DATETIME類型的值,并不影響其顯示形式SETDATEFORMATymd之后,常量’2024/3/243:00PM'合法SETLANGUAGEus_english之后,常量'24March20243:00PM'合法什么是常量(一)常量21常用數(shù)據(jù)類型的常量表現(xiàn)形式數(shù)據(jù)類型常量舉例bit數(shù)字0或1,非0的數(shù)字轉(zhuǎn)換為1,字符串'True'轉(zhuǎn)換為1,字符串'False'轉(zhuǎn)換為0int1278、256、23decimal[(p

[,s])]如有定義decimal(5,2),相應(yīng)常量可為123.45、123.40、1.23、123.00、-123.45等f(wàn)loat[(n)]如有定義float(1),相應(yīng)常量可為5.97237E24、1E-9等date'20240228'、'2024-02-28'、'28February2024'、'02/28/2024'time'14:30:26'、'10:00:00.123'datetime2'2024-02-2814:30:26'datetimeoffset'2024-02-2814:30:26+08:00',表示比協(xié)調(diào)世界時(shí)UTC早8小時(shí)(一)常量22常用數(shù)據(jù)類型的常量表現(xiàn)形式數(shù)據(jù)類型常量舉例char[(n)]varchar[(n|max)]'abc'、'123'、'2

*

6';使用兩個(gè)單引號(hào)表示嵌入的單引號(hào),如I'mastudent.的常量表示為'I''mastudent.'nchar[(n)]

nvarchar[(n|max)]N'數(shù)據(jù)庫(kù)技術(shù)'uniqueidentifier'FF19966F-868B-11D0-B42D-00C04FC964FF'

0x6F9619FF8B86D011B42D00C04FC96-4FF(二)變量23變量是指在程序運(yùn)行過(guò)程中其值可以改變的量。T-SQL的變量有局部變量和全局變量之分。什么是變量(二)變量24局部變量:局部變量是用戶定義的變量,其作用范圍僅在程序內(nèi)部。在程序中通常用來(lái)存儲(chǔ)從表中查詢到的數(shù)據(jù)或暫存程序執(zhí)行過(guò)程中的數(shù)據(jù)。變量聲明:語(yǔ)法:

DECLARE{@變量名數(shù)據(jù)類型}[,...n]1.局部變量(

DECLARE聲明)(二)變量25說(shuō)明:變量名必須以@開(kāi)頭,先用DECLARE聲明之后才能使用。用DECLARE命令聲明之后,所有的變量都被賦予初值NULL。數(shù)據(jù)類型可以是系統(tǒng)提供的類型、用戶定義類型或別名數(shù)據(jù)類型。變量不能是varchar(MAX)或varbinary(MAX)等數(shù)據(jù)類型。1.局部變量(

DECLARE聲明)(二)變量26SELECT賦值語(yǔ)句:語(yǔ)法:SELECT

{@變量名=表達(dá)式}[,...n]說(shuō)明:

用SELECT命令可以一次給多個(gè)變量賦值。當(dāng)表達(dá)式為表的列名時(shí),可使用子查詢功能從表中一次返回多個(gè)值,而賦值給變量的是其返回的最后一個(gè)值。如果子查詢沒(méi)有返回值,則變量被設(shè)為NULL。1.局部變量(SELECT賦值)(二)變量27【例9-2】聲明一個(gè)變長(zhǎng)字符型變量@var1,用SELECT賦值語(yǔ)句為它賦予從表“Reader”中查詢出編號(hào)為'2003216008'的讀者姓名,再用SELECT輸出語(yǔ)句輸出變量@var1的值。代碼:USELibraryDECLARE@var1varchar(8)--聲明變長(zhǎng)字符型局部變量SELECT@var1=Rname

FROMReaderWHERERID='2003216008'--將子查詢的結(jié)果賦值給局部變量SELECT@var1AS'讀者姓名'--顯示局部變量結(jié)果1.局部變量(SELECT賦值)(二)變量28代碼:USELibraryDECLARE@var1varchar(8)--聲明變長(zhǎng)字符型局部變量SELECT@var1=Rname

FROMReaderWHERERID='2003216008'--將子查詢的結(jié)果賦值給局部變量SELECT@var1AS'讀者姓名'--顯示局部變量結(jié)果執(zhí)行結(jié)果:1.局部變量(SELECT賦值)(二)變量29【例9-3】用SELECT語(yǔ)句賦值時(shí),在多個(gè)返回值中取最后一個(gè)。代碼:USELibraryDECLARE@var1varchar(8) --聲明變長(zhǎng)字符型局部變量--將子查詢的結(jié)果賦值給局部變量SELECT@var1=RnameFROMReader --或:

@var1=(SELECTRnameFROMReader)SELECT@var1AS'讀者姓名'--顯示局部變量的結(jié)果1.局部變量(SELECT賦值)(二)變量30代碼:USELibraryDECLARE@var1varchar(8) --聲明變長(zhǎng)字符型局部變量--將子查詢的結(jié)果賦值給局部變量SELECT@var1=RnameFROMReader --或:

@var1=(SELECTRnameFROMReader)SELECT@var1AS'讀者姓名'--顯示局部變量的結(jié)果執(zhí)行結(jié)果:1.局部變量(SELECT賦值)(二)變量31SET賦值語(yǔ)句:語(yǔ)法:

SET@變量名=表達(dá)式說(shuō)明:SET賦值語(yǔ)句只能給一個(gè)變量賦值。子查詢必須是括號(hào)括起來(lái)的完整SELECT查詢語(yǔ)句。1.局部變量(SET賦值)(二)變量32【例9-4】用SET賦值語(yǔ)句為局部變量@no賦值,再用SELECT查詢語(yǔ)句查詢出讀者表中讀者號(hào)為@no的讀者信息。代碼:USELibraryDECLARE@nochar(10)--聲明變長(zhǎng)字符型局部變量SET@no='2004060003' --局部變量賦值SELECTRID,Rname --查詢語(yǔ)句FROMReaderWHERERID=@no--查詢中引用局部變量1.局部變量(SET賦值)(二)變量33代碼:USELibraryDECLARE@nochar(10)--聲明變長(zhǎng)字符型局部變量SET@no='2004060003' --局部變量賦值SELECTRID,Rname --查詢語(yǔ)句FROMReaderWHERERID=@no--查詢中引用局部變量查詢結(jié)果:1.局部變量(SET賦值)(二)變量34【例9-5】用SET賦值語(yǔ)句將學(xué)生表“Student”統(tǒng)計(jì)查詢出的學(xué)生總數(shù)賦值給局部變量@count,并用SELECT語(yǔ)句輸出。代碼:USEEDUCGODECLARE@countint--聲明整型局部變量--將子查詢的結(jié)果賦值給局部變量SET@count=(SELECTCOUNT(*)FROMStudent)SELECT@countAS學(xué)生總數(shù)1.局部變量(SET賦值)(二)變量35代碼:USEEDUCGODECLARE@countint--聲明整型局部變量--將子查詢的結(jié)果賦值給局部變量SET@count=(SELECTCOUNT(*)FROMStudent)SELECT@countAS學(xué)生總數(shù)執(zhí)行結(jié)果:1.局部變量(SET賦值)(二)變量36賦值語(yǔ)句比較SET@count=(SELECTCOUNT(*)FROMStudent)SELECT@var1=RnameFROMReader一般選擇約定當(dāng)執(zhí)行一個(gè)簡(jiǎn)單的變量賦值時(shí),使用SET賦值語(yǔ)句。當(dāng)基于查詢進(jìn)行變量賦值時(shí),使用SELECT賦值語(yǔ)句。局部變量賦值語(yǔ)句比較(二)變量37全局變量:全局變量是SQLServer系統(tǒng)提供并賦值的變量。用戶不能建立全局變量,也不能用SET賦值語(yǔ)句和SELECT賦值語(yǔ)句修改全局變量的值。通??梢詫⑷肿兞康闹蒂x給局部變量,以便保存和處理。全局變量以@@開(kāi)頭,例如,全局變量@@servername提供服務(wù)器名,全局變量@@version提供SQLServer的版本信息。2.全局變量(二)變量38【例9-6】顯示SQLServer的版本。代碼:SELECT@@version執(zhí)行結(jié)果:2.全局變量(三)日期和時(shí)間類型表達(dá)式39ISO8601國(guó)際標(biāo)準(zhǔn)格式:YYYY-MM-DDThh:mm:ss[.mmm]YYYY、MM、DD在字符串中分別表示四位數(shù)字的年、兩位數(shù)字的月和兩位數(shù)字日,日期之間也可以省略字符“-”。T表示之后為時(shí)間,hh為兩位數(shù)字小時(shí),mm為兩位數(shù)字分鐘,ss為兩位數(shù)字秒和mmm三位數(shù)字的毫秒。

例如:2024-03-23、20240323和2024-03-23T21:25:10.487SQLServer日期時(shí)間數(shù)據(jù)類型值的存儲(chǔ)與顯示均為“-”號(hào)間隔國(guó)際標(biāo)準(zhǔn)日期時(shí)間格式不受SETDATEFORMAT或

SETLANGUAGE

設(shè)置的影響,始終有效建議設(shè)計(jì)者盡量使用此格式1.國(guó)際標(biāo)準(zhǔn)日期和時(shí)間格式(三)日期和時(shí)間類型表達(dá)式40年月日之間也可以使用“/”、“-”或“.”作為分隔符,以滿足各個(gè)國(guó)家日期表達(dá)習(xí)慣的之需。特殊日期格式的設(shè)置SETDATEFORMATformat|@format_var功能:用于解釋

date、datetime2

和datetimeoffset

等類型的字符格式字符串“年、月、日”在日期部分的順序。如果順序和設(shè)置不匹配,這些值將由于超出范圍而不會(huì)被解釋為日期,或者被錯(cuò)誤地解釋。不影響存儲(chǔ)在數(shù)據(jù)庫(kù)中的日期數(shù)據(jù)類型值的顯示,也不影響存儲(chǔ)格式。2.日期的有效格式說(shuō)明參數(shù)format|@format_var為日期部分的順序有效字符串為:mdy、dmy、ymd、ydm、myd和dym(三)日期和時(shí)間類型表達(dá)式41【例9-7】各種日期字符格式字符串的有效格式設(shè)置。DECLARE@OLDTimedate --聲明日期型變量SETDATEFORMATdmy --設(shè)置日月年順序SELECT@OLDTime=’23/3/2024' --日月年有效日期字符串SELECT’23/3/2024’ASdmy,@OLDTimeAS‘輸出格式‘--輸出常量變量SETDATEFORMATmdy --設(shè)置月日年順序SELECT@OLDTime='3.23.2024' --月日年有效日期字符串SELECT‘3.23.2012’ASmdy,@OLDTimeAS‘輸出格式’--輸出常量變量SETDATEFORMATdym --設(shè)置日年月順序SELECT@OLDTime='23/2024/3' --日年月有效日期字符串SELECT‘23/2024/3’ASdym,@OLDTimeAS‘輸出格式’--輸出常量變量SELECT@OLDTime=‘2024-3-23’--ISO8601有效日期,不受設(shè)置影響SELECT‘2024-3-23’AS‘ISO8601’,@OLDTimeAS‘輸出格式‘--輸出2.日期的有效格式(三)日期和時(shí)間類型表達(dá)式42會(huì)話語(yǔ)言環(huán)境設(shè)置:SETLANGUAGE[N]'language'|@language_var功能:指定會(huì)話的語(yǔ)言環(huán)境。會(huì)話語(yǔ)言確定日期格式和系統(tǒng)消息,并隱式設(shè)置

SETDATEFORMAT

的設(shè)置。說(shuō)明:參數(shù)[N]'language'|@language_var是存儲(chǔ)在系統(tǒng)中的語(yǔ)言的名稱,[N]表示可以使用Unicode的語(yǔ)言??赏ㄟ^(guò)執(zhí)行sp_helplanguage命令查看各國(guó)的語(yǔ)言的信息。3.會(huì)話的語(yǔ)言環(huán)境設(shè)置(三)日期和時(shí)間類型表達(dá)式43【例9-8】會(huì)話中日期語(yǔ)言環(huán)境設(shè)置。DECLARE@TodayDATESET@Today=‘2024/5/23'SETLANGUAGEItalianSELECTDATENAME(WEEKDAY,@Today)AS'意大利星期'SETLANGUAGEus_englishSELECTDATENAME(WEEKDAY,@Today)AS'英文星期'SETLANGUAGE簡(jiǎn)體中文SELECTDATENAME(WEEKDAY,@Today)AS'中文星期’3.會(huì)話的語(yǔ)言環(huán)境設(shè)置(四)內(nèi)置函數(shù)44常用聚合函數(shù):COUNT、SUM、AVG、MAX和MIN其他9種:計(jì)算標(biāo)準(zhǔn)偏差(STDEV)、方差(VAR)等【例9-9】計(jì)算學(xué)生表中入學(xué)錄取成績(jī)的平均分和標(biāo)準(zhǔn)偏差(一種量度數(shù)據(jù)分布的分散程度之標(biāo)準(zhǔn),用以衡量數(shù)據(jù)值偏離算術(shù)平均值的程度)。1.聚合函數(shù)(列函數(shù))(四)內(nèi)置函數(shù)45代碼:USEEDUCGOSELECTAVG(AScores)AS平均分,STDEV(AScores)AS標(biāo)準(zhǔn)偏差FROMStudent執(zhí)行結(jié)果:說(shuō)明:從統(tǒng)計(jì)學(xué)的角度來(lái)看,在平均分?jǐn)?shù)相同的情況下,標(biāo)準(zhǔn)偏差越大說(shuō)明學(xué)生之間的錄取分?jǐn)?shù)差距越大。1.聚合函數(shù)(列函數(shù))(四)內(nèi)置函數(shù)462.日期和時(shí)間函數(shù)——日期元素日期元素縮

寫(xiě)含

義日期元素縮

寫(xiě)含

義yearYYYY年quarterQQ季度數(shù)monthMM月hourHH時(shí)dayDD日minuteMI分dayofyearDY年的天數(shù)secondSS秒weekWK星期數(shù)millisecondMS毫秒weekdayDW星期幾microsecondMCS微秒(四)內(nèi)置函數(shù)47【例9-10】DATEADD(日期元素,數(shù)值,日期)函數(shù)可按照“日期元素”給定的日期單位,返回“日期”加上“數(shù)值”的新日期。代碼:SETLANGUAGEus_english--設(shè)置英文語(yǔ)言環(huán)境GODECLARE@OLDTimedatetime2--聲明日期和時(shí)間局部變量SET@OLDTime=‘23March20243:00PM'--局部變量賦值SELECTDATEADD(HH,4,@OldTime)AS'4小時(shí)后'執(zhí)行結(jié)果:2.日期和時(shí)間函數(shù)——DATEADD(四)內(nèi)置函數(shù)48【例9-11】DATEDIFF(日期元素,日期1,日期2)函數(shù)返回兩個(gè)日期間的差值并將其轉(zhuǎn)換為指定日期元素的形式。代碼:DECLARE@FirstTimedate,@SecondTimedate--聲明類型SET@FirstTime=‘2024-3-23'SET@SecondTime=‘2024-7-27'SELECTDATEDIFF(DD,@FirstTime,@SecondTime)

天數(shù)--輸出兩日期之間相差天數(shù)DD的函數(shù)值執(zhí)行結(jié)果:2.日期和時(shí)間函數(shù)——DATEDIFF(四)內(nèi)置函數(shù)49【例9-12】

DATENAME(日期元素,日期)

函數(shù)以字符串的形式返回指定時(shí)間的星期名稱。

代碼:SETLANGUAGEus_englishDECLARE@StatementDatedate SET@StatementDate=‘2024-7-27'SELECTDATENAME(DW,@StatementDate)AS'WEEKDAY'--日期的星期名稱函數(shù)值執(zhí)行結(jié)果:2.日期和時(shí)間函數(shù)——DATENAME(四)內(nèi)置函數(shù)50【例9-13】DATEPART(日期元素,日期)

函數(shù)返回日期元素指定的日期部分的整數(shù)。代碼:DECLARE@WhatsTheDaydate SET@WhatsTheDay=‘2024/10/01'SELECTCAST(DATEPART(yyyy,@WhatsTheDay)ASchar(4))+'年'+CAST(DATEPART(mm,@WhatsTheDay)ASchar(2))+'月'+CAST(DATEPART(dd,@WhatsTheDay)ASvarchar(2))+'日'AS'國(guó)慶節(jié)'執(zhí)行結(jié)果:2.日期和時(shí)間函數(shù)——DATEPART(四)內(nèi)置函數(shù)51【例9-14】

GETDATE()

函數(shù)返回當(dāng)前日期。YEAR(日期)、MONTH(日期)和DAY(日期)

函數(shù)返回日期的年、月及天數(shù)。假設(shè)系統(tǒng)當(dāng)前日期為2023年2月7日。

代碼:SELECTGETDATE()AS當(dāng)前日期, --返回當(dāng)前日期YEAR(GETDATE())AS年, --取當(dāng)前日期的年MONTH(GETDATE())AS月, --取當(dāng)前日期的月DAY(GETDATE())AS日 --取當(dāng)前日期的天數(shù)執(zhí)行結(jié)果:2.日期和時(shí)間函數(shù)——GETDATE(四)內(nèi)置函數(shù)52【例9-15】

ASCII(字符表達(dá)式)

函數(shù)可返回字符表達(dá)式中最左側(cè)字符的ASCII碼值。

代碼:DECLARE@StringTestintSET@StringTest=ASCII('Robin') --取字符'R'的ASCII碼SELECT@StringTest執(zhí)行結(jié)果:3.字符串函數(shù)——ASCII(四)內(nèi)置函數(shù)53【例9-16】CHAR(整型表達(dá)式)函數(shù)將整型的ASCII碼轉(zhuǎn)換為字符。代碼:DECLARE@StringTestintSET@StringTest=ASCII('Robin') --取字符'R'的ASCII碼SELECTCHAR(@StringTest)--輸出ASCII碼值對(duì)應(yīng)的字符'R'執(zhí)行結(jié)果:3.字符串函數(shù)——CHAR(四)內(nèi)置函數(shù)54【例9-17】

LEFT(字符表達(dá)式,整型表達(dá)式)

函數(shù)返回字符串中從左邊開(kāi)始的指定個(gè)數(shù)的字符。假設(shè)某圖書(shū)的國(guó)際標(biāo)準(zhǔn)書(shū)號(hào)ISBN為:978-7-115-19345-9,取前三位表示是圖書(shū)。代碼:DECLARE@StringTestchar(17)--聲明定長(zhǎng)字符型的變量SET@StringTest='978-7-115-19345-2'SELECTLEFT(@StringTest,3)AS'圖書(shū)類型'

--函數(shù)返回左邊三位字符執(zhí)行結(jié)果:3.字符串函數(shù)——LEFT(四)內(nèi)置函數(shù)55【例9-18】

RIGHT(字符表達(dá)式,整型表達(dá)式)

函數(shù)返回字符串從右邊開(kāi)始的指定個(gè)數(shù)的字符。假設(shè)某圖書(shū)的國(guó)際標(biāo)準(zhǔn)書(shū)號(hào)ISBN為:978-7-115-19345-9,取最右一位校驗(yàn)碼。

代碼:DECLARE@StringTestchar(17)--聲明定長(zhǎng)字符型的變量SET@StringTest='978-7-115-19345-9'SELECTRIGHT(@StringTest,1)AS‘校驗(yàn)碼’--函數(shù)返回右邊一位字符執(zhí)行結(jié)果:3.字符串函數(shù)——RIGHT(四)內(nèi)置函數(shù)56【例9-19】

SUBSTRING(字符表達(dá)式,起始點(diǎn),n)

函數(shù)返回字符表達(dá)式中從“起始點(diǎn)”開(kāi)始的n個(gè)字符。假設(shè)某圖書(shū)的國(guó)際標(biāo)準(zhǔn)書(shū)號(hào)ISBN為:978-7-115-19345-9,從第七位取三位字符表示出版社編號(hào)。

代碼:DECLARE@StringTestchar(17)--聲明定長(zhǎng)字符型的變量SET@StringTest='978-7-115-19345-9'SELECTSUBSTRING(@StringTest,7,3)AS'出版社編號(hào)' --函數(shù)返回第七位開(kāi)始的三個(gè)字符執(zhí)行結(jié)果:3.字符串函數(shù)——SUBSTRING(四)內(nèi)置函數(shù)57【例9-20】

RTRIM(字符表達(dá)式)

函數(shù)截?cái)嗨形膊靠崭窈蠓祷匾粋€(gè)字符串。

代碼:DECLARE@StringTestchar(10)--聲明定長(zhǎng)字符型變量SET@StringTest='Robin'--當(dāng)字符串不夠10個(gè)的時(shí)候,后面自動(dòng)添加空格SELECT@StringTest+'-End'AS'未截空格',

RTRIM(@StringTest)+'-End'AS'截尾空格' 執(zhí)行結(jié)果:3.字符串函數(shù)——RTRIM(四)內(nèi)置函數(shù)58【例9-21】LTRIM(字符表達(dá)式)

函數(shù)返回刪除了前導(dǎo)空格字符后的字符表達(dá)式。

代碼:DECLARE@StringTestchar(10)--聲明定長(zhǎng)字符類型變量SET@StringTest='Robin'SELECT'Start-'+@StringTestAS'未截空格','Start-'+LTRIM(@StringTest)AS'刪前導(dǎo)空格'執(zhí)行結(jié)果:3.字符串函數(shù)——LTRIM(四)內(nèi)置函數(shù)59【例9-22】

STR(浮點(diǎn)表達(dá)式[,長(zhǎng)度[,小數(shù)]])函數(shù)返回由數(shù)字?jǐn)?shù)據(jù)轉(zhuǎn)換來(lái)的字符數(shù)據(jù)。代碼:SELECT985.0/6AS數(shù)值,--輸出浮點(diǎn)小數(shù)STR(985.0/6,6,2)AS字符串

--函數(shù)返回6個(gè)字符寬度,2位小數(shù)的字符串執(zhí)行結(jié)果:3.字符串函數(shù)——STR(四)內(nèi)置函數(shù)60【例9-23】

LOWER(字符表達(dá)式)函數(shù)將字符表達(dá)式中的大寫(xiě)字母轉(zhuǎn)換為小寫(xiě)字母。代碼:DECLARE@StringTestchar(10)SET@StringTest='DATETIME2'SELECTLOWER(LEFT(@StringTest,4))AS小寫(xiě)

--函數(shù)返回小寫(xiě)字母字符串執(zhí)行結(jié)果:3.字符串函數(shù)——LOWER(四)內(nèi)置函數(shù)61【例9-24】

UPPER(字符表達(dá)式)

函數(shù)將字符表達(dá)式中的小寫(xiě)字符轉(zhuǎn)換為大寫(xiě)字符。代碼:DECLARE@StringTestchar(10)SET@StringTest='select'SELECTUPPER(@StringTest)AS大寫(xiě)

--函數(shù)返回大寫(xiě)字符串

執(zhí)行結(jié)果:3.字符串函數(shù)——UPPER(四)內(nèi)置函數(shù)62【例9-25】

LEN(字符表達(dá)式)

函數(shù)返回某個(gè)指定字符串的長(zhǎng)度,不計(jì)字符串后的空格。代碼:DECLARE@StringTestchar(10)SET@StringTest='SQLServer‘--注意不計(jì)后面的空格SELECTLEN(@StringTest)AS字符串長(zhǎng)度

--函數(shù)返回字符串長(zhǎng)度

執(zhí)行結(jié)果:3.字符串函數(shù)——LEN(四)內(nèi)置函數(shù)63【例9-25】

LEN(字符表達(dá)式)

函數(shù)返回某個(gè)指定字符串的長(zhǎng)度,不計(jì)字符串后的空格。代碼:DECLARE@StringTestchar(12)SET@StringTest='數(shù)據(jù)庫(kù)技術(shù)!'--注意漢字的長(zhǎng)度SELECTLEN(@StringTest)AS字符串長(zhǎng)度

--函數(shù)返回字符串長(zhǎng)度

執(zhí)行結(jié)果:3.字符串函數(shù)——LEN(四)內(nèi)置函數(shù)64【例9-26】

CAST(表達(dá)式AS數(shù)據(jù)類型)函數(shù)將表達(dá)式的類型轉(zhuǎn)換為指定的數(shù)據(jù)類型。

代碼:DECLARE@StringTestnchar(6),@IntTestintSET@StringTest='數(shù)據(jù)庫(kù)成績(jī):'SET@IntTest=90SELECT@StringTest+CAST(@IntTestASchar(4))AS考試成績(jī)--整型轉(zhuǎn)換為字符型

執(zhí)行結(jié)果:4.數(shù)據(jù)類型轉(zhuǎn)換函數(shù)——CAST(四)內(nèi)置函數(shù)65【例9-27】

CONVERT(數(shù)據(jù)類型(長(zhǎng)度),表達(dá)式)函數(shù)將表達(dá)式的類型轉(zhuǎn)換為指定的數(shù)據(jù)類型。

代碼:DECLARE@StringTestnchar(6),@IntTestintSET@StringTest='數(shù)據(jù)庫(kù)成績(jī):'SET@IntTest=90SELECT@StringTest+CONVERT(char(4),@IntTest)AS考試成績(jī)--整型轉(zhuǎn)換為字符型

執(zhí)行結(jié)果:4.數(shù)據(jù)類型轉(zhuǎn)換函數(shù)——CONVERT(四)內(nèi)置函數(shù)66【例9-28】ISNULL(空值,指定的值)函數(shù)為空值置換函數(shù),可以用指定的值代替空值。

代碼:USELibrary--如果Lendnum為NULL,則ISNULL(Lendnum,0)的值為0SELECT*,ISNULL(Lendnum,0)AS空值置換FROMReader

執(zhí)行結(jié)果:5.其他內(nèi)置函數(shù)——ISNULL(四)內(nèi)置函數(shù)67用戶定義函數(shù)是數(shù)據(jù)庫(kù)對(duì)象,可以像系統(tǒng)函數(shù)一樣,在查詢或存儲(chǔ)過(guò)程等程序段中使用,也可以像存儲(chǔ)過(guò)程一樣通過(guò)EXECUTE命令來(lái)執(zhí)行。詳細(xì)內(nèi)容參見(jiàn)教材第10章。6.用戶定義函數(shù)(五)運(yùn)算符68T-SQL的運(yùn)算符優(yōu)

級(jí)運(yùn)算符類別所包含運(yùn)算符1一元運(yùn)算符+(正)、?(負(fù))、~(取反)2算術(shù)運(yùn)算符*(乘)、/(除)、%(取模)3算術(shù)字符串運(yùn)算符+(加)、?(減)、+(連接)4比較運(yùn)算符=(等于)、>(大于)、>=(大于等于)、<(小于)、<=(小于等于)、<>(或!=,不等于)、!<(不小于)、!>(不大于)5位運(yùn)算符&(位與)、|(位或)、^(位異或)6邏輯運(yùn)算符NOT(非)7邏輯運(yùn)算符AND(與)8邏輯運(yùn)算符ALL(所有)、ANY(任意一個(gè))、BETWEEN(兩者之間)、EXISTS(存在)、IN(在范圍內(nèi))、LIKE(匹配)、OR(或)、SOME(任意一個(gè))9賦值運(yùn)算符=(賦值)單元2.7T-SQL編程與應(yīng)用69T-SQL編程基礎(chǔ)一表達(dá)式二流程控制語(yǔ)句三批處理四事務(wù)五

三、流程控制語(yǔ)句70順序語(yǔ)句1IF...ELSE分支語(yǔ)句2WHILE循環(huán)語(yǔ)句3其他控制語(yǔ)句4CASE多分支表達(dá)式5(一)順序語(yǔ)句71功能:局部變量賦值設(shè)定用戶執(zhí)行T-SQL命令時(shí)的處理選項(xiàng)SET選項(xiàng)ON:選項(xiàng)開(kāi)關(guān)打開(kāi)。SET選項(xiàng)OFF:選項(xiàng)開(kāi)關(guān)關(guān)閉。SET選項(xiàng)值:設(shè)定選項(xiàng)的具體值。1.SET語(yǔ)句(一)順序語(yǔ)句72例如:--阻止返回可顯示受T-SQL語(yǔ)句影響的行數(shù)的消息SETNOCOUNT{ON|OFF}--將日期格式設(shè)置為年月日格式SETDATEFORMATymd--ChangedlanguagesettingSETLANGUAGEus_englishtous_English--將語(yǔ)言設(shè)定變更為繁體中文SETLANGUAGE繁體中文--將語(yǔ)言設(shè)定變更為簡(jiǎn)體中文SETLANGUAGE簡(jiǎn)體中文1.SET語(yǔ)句(一)順序語(yǔ)句73語(yǔ)法:SELECT表達(dá)式[,...n]2.SELECT輸出語(yǔ)句(一)順序語(yǔ)句74語(yǔ)法:PRINT表達(dá)式3.PRINT輸出語(yǔ)句三、流程控制語(yǔ)句75順序語(yǔ)句1IF...ELSE分支語(yǔ)句2WHILE循環(huán)語(yǔ)句3其他控制語(yǔ)句4CASE多分支表達(dá)式5(二)IF…ELSE分支語(yǔ)句76語(yǔ)法:IF邏輯表達(dá)式

<T-SQL語(yǔ)句|語(yǔ)句塊>/*邏輯表達(dá)式為真時(shí)執(zhí)行*/[ELSE<T-SQL語(yǔ)句|語(yǔ)句塊>] /*邏輯表達(dá)式為假時(shí)執(zhí)行*/功能:

IF…ELSE用來(lái)判斷當(dāng)某一條件成立時(shí)執(zhí)行某段程序,條件不成立時(shí)執(zhí)行另一段程序。說(shuō)明:“邏輯表達(dá)式”可以是各種表達(dá)式的組合,但表達(dá)式的值必須是邏輯值真或假。ELSE子句任選。IF…ELSE(二)IF…ELSE分支語(yǔ)句77語(yǔ)句塊語(yǔ)法:BEGINT-SQL語(yǔ)句 /*語(yǔ)句塊*/END說(shuō)明BEGIN...END語(yǔ)句塊允許嵌套。IF…ELSE(二)IF…ELSE分支語(yǔ)句78【例9-29】用IF…ELSE語(yǔ)句查詢圖書(shū)中有沒(méi)有英語(yǔ)書(shū),如果圖書(shū)中有英語(yǔ)書(shū),統(tǒng)計(jì)其數(shù)量,否則顯示“沒(méi)有英語(yǔ)書(shū)”。代碼:USELibraryGO/*如果圖書(shū)中有英語(yǔ)書(shū),統(tǒng)計(jì)其數(shù)量,否則顯示沒(méi)有英語(yǔ)書(shū)*/IFEXISTS(SELECT*FROMBookWHEREBnameLIKE'%英語(yǔ)%')SELECTCOUNT(*)AS英語(yǔ)圖書(shū)數(shù)量FROMBookWHEREBnameLIKE'%英語(yǔ)%'ELSEPRINT'沒(méi)有英語(yǔ)書(shū)'IF…ELSE(二)IF…ELSE分支語(yǔ)句79【例9-30】用IF...ELSE語(yǔ)句的嵌套結(jié)構(gòu)進(jìn)行圖書(shū)查詢。查詢圖書(shū)中有沒(méi)有英語(yǔ)書(shū),有則統(tǒng)計(jì)其冊(cè)數(shù),否則查詢有沒(méi)有SQLServer2008方面的圖書(shū),有則統(tǒng)計(jì)其冊(cè)數(shù)。代碼:USELibraryGOIF…ELSE(二)IF…ELSE分支語(yǔ)句80IFEXISTS(SELECT*FROMBookWHEREBnameLIKE'%英語(yǔ)%')SELECTCOUNT(*)AS英語(yǔ)圖書(shū)數(shù)量FROMBookWHEREBnameLIKE'%英語(yǔ)%'ELSEIFEXISTS(SELECT*FROMBookWHEREBnameLIKE'%SQLServer2008%')SELECTCOUNT(*)ASSQLServer2008圖書(shū)數(shù)量FROMBookWHEREBnameLIKE'%SQLServer2008%'ELSEPRINT'英語(yǔ)和SQLServer2008兩種書(shū)都沒(méi)有!‘執(zhí)行結(jié)果:IF…ELSE(二)IF…ELSE分支語(yǔ)句81【例9-31】

BEGIN…END語(yǔ)句在圖書(shū)查詢中的應(yīng)用。代碼:DECLARE@ebookint,@cbookintIFEXISTS(SELECT*FROMBookWHEREBnamelike'%英語(yǔ)%')BEGINSELECT@ebook=COUNT(*)FROMBookWHEREBnameLIKE'%英語(yǔ)%'PRINT'英語(yǔ)書(shū)數(shù)量'+RTRIM(CAST(@ebookASchar(4)))+'冊(cè)'ENDELSEPRINT'英語(yǔ)書(shū)沒(méi)有!’BEGIN…END(二)IF…ELSE分支語(yǔ)句82【例9-31】

BEGIN…END語(yǔ)句在圖書(shū)查詢中的應(yīng)用。代碼:IFEXISTS(SELECT*FROMBookWHEREBnameLIKE'%SQLServer2008%')BEGINSELECT@cbook=COUNT(*)FROMBookWHEREBnameLIKE'%SQLServer2008%'PRINT'SQLServer2008的書(shū)'+RTRIM(CAST(@cbookASchar(4)))+'冊(cè)。'ENDELSEPRINT'SQLServer2008書(shū)沒(méi)有!‘執(zhí)行結(jié)果:BEGIN…END三、流程控制語(yǔ)句83順序語(yǔ)句1IF...ELSE分支語(yǔ)句2WHILE循環(huán)語(yǔ)句3其他控制語(yǔ)句4CASE多分支表達(dá)式5(三)WHILE循環(huán)語(yǔ)句84語(yǔ)法:WHILE<邏輯表達(dá)式>BEGIN<T-SQL語(yǔ)句或語(yǔ)句塊>[BREAK] /*退出此循環(huán)語(yǔ)句的執(zhí)行*/[CONTINUE] /*結(jié)束一次循環(huán)體的執(zhí)行*/END功能:WHILE命令在設(shè)定的條件為真時(shí)會(huì)重復(fù)執(zhí)行命令行或程序塊,除非遇到邏輯表達(dá)式為假或遇到BREAK語(yǔ)句才跳出循環(huán)。CONTINUE命令可以讓程序跳過(guò)CONTINUE命令之后的語(yǔ)句,回到WHILE循環(huán)的第一行命令。BREAK命令則讓程序無(wú)條件跳出循環(huán),結(jié)束WHILE命令的執(zhí)行。WHILE(三)WHILE循環(huán)語(yǔ)句85【例9-32】一個(gè)簡(jiǎn)單的循環(huán)程序。代碼:DECLARE@xintSET@x=0WHILE@x<3 --當(dāng)@x>=3時(shí)終止循環(huán)BEGINSET@x=@x+1PRINT'x='+CONVERT(char(1),@x)--類型轉(zhuǎn)換函數(shù)CONVERTEND執(zhí)行結(jié)果:x=1x=2x=3WHILE

三、流程控制語(yǔ)句86順序語(yǔ)句1IF...ELSE分支語(yǔ)句2WHILE循環(huán)語(yǔ)句3其他控制語(yǔ)句4CASE多分支表達(dá)式5(四)其他控制語(yǔ)句87語(yǔ)法:GOTOlabel功能:將執(zhí)行語(yǔ)句無(wú)條件跳轉(zhuǎn)到標(biāo)簽處,并從標(biāo)簽位置繼續(xù)處理1.GOTO語(yǔ)句(四)其他控制語(yǔ)句88語(yǔ)法:WAITFORDELAY<延時(shí)時(shí)間> /*設(shè)定等待時(shí)間*/|TIME<到達(dá)時(shí)刻> /*設(shè)定等待到某一時(shí)刻*/

功能:暫停程序執(zhí)行,直到所設(shè)定的等待時(shí)間已過(guò)或所設(shè)定的時(shí)間已到才繼續(xù)往下執(zhí)行。說(shuō)明:時(shí)間為TIME類型的數(shù)據(jù),如“11:46:18”,但不能包括日期。各關(guān)鍵字含義如下:DELAY:用來(lái)設(shè)定等待的時(shí)間,最多可達(dá)24小時(shí)。TIME:用來(lái)設(shè)定等待結(jié)束的時(shí)間點(diǎn)。2.WAITFOR語(yǔ)句(四)其他控制語(yǔ)句89【例9-33】延遲30秒執(zhí)行查詢。代碼:USELibraryGOWAITFORDELAY’00:00:30’SELECT*FROMReader2.WAITFOR語(yǔ)句(四)其他控制語(yǔ)句90【例9-34】在時(shí)刻09:25:00執(zhí)行查詢。代碼:USELibraryGOWAITFORTIME‘09:26:00'SELECT*FROMReader2.WAITFOR語(yǔ)句(四)其他控制語(yǔ)句91語(yǔ)法:RETURN<整型表達(dá)式>

功能:RETURN命令用于結(jié)束當(dāng)前程序的執(zhí)行,并返回到一個(gè)調(diào)用它的程序,可指定一個(gè)返回值。說(shuō)明:RETURN的執(zhí)行是即時(shí)且完全的,可在任何時(shí)候用于從過(guò)程、批處理或語(yǔ)句塊中退出,RETURN之后的語(yǔ)句不執(zhí)行。3.RETURN語(yǔ)句(四)其他控制語(yǔ)句92【例9-35】在以下程序段中,RETURN命令返回@x和@y中較大的值。代碼:DECLARE@xint,@yint…IF@x>@y --@x>@y返回@xRETURN@xELSE --否則返回@yRETURN@y3.RETURN語(yǔ)句

三、流程控制語(yǔ)句93順序語(yǔ)句1IF...ELSE分支語(yǔ)句2WHILE循環(huán)語(yǔ)句3其他控制語(yǔ)句4CASE多分支表達(dá)式5(五)CASE多分支表達(dá)式94語(yǔ)法:CASE輸入表達(dá)式WHEN<when表達(dá)式1>THEN結(jié)果表達(dá)式1WHEN<when表達(dá)式2>THEN結(jié)果表達(dá)式2…ELSE結(jié)果表達(dá)式nEND功能:首先計(jì)算“輸入表達(dá)式”,然后將其值依次與“when表達(dá)式”的值進(jìn)行比較,當(dāng)“輸入表達(dá)式”的值等于“when表達(dá)式”的值時(shí),返回第一個(gè)滿足條件THEN后的“結(jié)果表達(dá)式”的值。如果比較運(yùn)算結(jié)果都不為真,則返回ELSE后的表達(dá)式的值。如果省略此參數(shù)并且比較運(yùn)算的計(jì)算結(jié)果都不為真,表達(dá)式的值為NULL。1.簡(jiǎn)單CASE表達(dá)式(五)CASE多分支表達(dá)式95【例9-36】顯示各讀者可借書(shū)的數(shù)量。代碼:SELECTRnameAS讀者名,rt.TypenameAS讀者類型,限借閱量=

CASEr.TypeID--根據(jù)TypeID的值得到CASE表達(dá)式的返回值WHEN1THEN'可以借6本書(shū)!'WHEN2THEN'可以借4本書(shū)!'WHEN3THEN'可以借3本書(shū)!'ELSE'無(wú)規(guī)定'ENDFROMReaderr,ReaderTypertWHEREr.TypeID=rt.TypeID1.簡(jiǎn)單CASE表達(dá)式(五)CASE多分支表達(dá)式96語(yǔ)法:CASEWHEN邏輯表達(dá)式1THEN結(jié)果表達(dá)式1WHEN邏輯表達(dá)式2THEN結(jié)果表達(dá)式2…ELSE結(jié)果表達(dá)式nEND功能:依次對(duì)每個(gè)WHEN子句求邏輯表達(dá)式的值,當(dāng)計(jì)算結(jié)果為真時(shí),表達(dá)式的值為第一個(gè)滿足條件的THEN結(jié)果表達(dá)式的值。如果運(yùn)算結(jié)果都不為真,則表達(dá)式的值為ELSE后結(jié)果表達(dá)式的值。如果省略此參數(shù)并且比較運(yùn)算的計(jì)算結(jié)果都不為真,表達(dá)式的值為NULL。2.搜索CASE表達(dá)式(五)CASE多分支表達(dá)式97【例9-37】顯示各讀者可借書(shū)的數(shù)量。代碼:USELibraryGOSELECTRname,rt.TypenameAS類型,限借閱量=CASE--根據(jù)TypeID的值得到CASE表達(dá)式的值WHENr.TypeID=1THEN'可以借6本書(shū)!'WHENr.TypeID=2THEN'可以借4本書(shū)!'WHENr.TypeID=3THEN'可以借3本書(shū)!'ELSE'無(wú)規(guī)定'ENDFROMReaderr,ReaderTypertWHEREr.TypeID=rt.TypeID2.CASE搜索表達(dá)式

單元2.7T-SQL編程與應(yīng)用98T-SQL編程基礎(chǔ)一表達(dá)式二流程控制語(yǔ)句三批處理四事務(wù)五四、批處理99批處理:一個(gè)或多個(gè)T-SQL語(yǔ)句組成的,應(yīng)用程序?qū)⑦@些語(yǔ)句作為一個(gè)單元提交給SQLServer,并由SQLServer編譯成一個(gè)執(zhí)行計(jì)劃,然后作為一個(gè)整體來(lái)執(zhí)行。批處理結(jié)束符:GO注意:GO命令本身并不是一個(gè)T-SQL語(yǔ)句。對(duì)CREATE等數(shù)據(jù)庫(kù)DDL語(yǔ)句均要求不能在批處理中與其他語(yǔ)句組合使用,其批處理必須以CREATE語(yǔ)句開(kāi)始。例:USELibraryGO--表示上一批結(jié)束,此處的GO不能省略CREATETABLEBook--此批以CREATE語(yǔ)句開(kāi)始1.什么是批處理四、批處理100語(yǔ)法錯(cuò):批處理在編譯過(guò)程中出現(xiàn)錯(cuò)誤提示信息,則編譯失敗,這時(shí)批處理中的語(yǔ)句均無(wú)法執(zhí)行。運(yùn)行錯(cuò):如算術(shù)溢出或違反約束,則大多數(shù)運(yùn)行錯(cuò)誤將停止執(zhí)行批處理中的當(dāng)前語(yǔ)句和它之后的語(yǔ)句,少數(shù)運(yùn)行錯(cuò)誤(如違反約束)僅停止執(zhí)行當(dāng)前語(yǔ)句,而繼續(xù)執(zhí)行批處理中其他語(yǔ)句。但是在遇到運(yùn)行錯(cuò)誤之前執(zhí)行的語(yǔ)句將不受任何影響。2.批處理中的錯(cuò)誤提示四、批處理101【例9-38】批處理中的不同錯(cuò)誤的結(jié)果對(duì)比。代碼段1:USELibraryGOUSEEDUCSELECTSID,Sname,SexFORMStudent--此處有FROM的語(yǔ)法錯(cuò)誤WHERESex='男'GO2.批處理中的錯(cuò)誤提示四、批處理102【例9-38】批處理中的不同錯(cuò)誤的結(jié)果對(duì)比。代碼段1:USELibraryGOUSEEDUCSELECTSID,Sname,SexFORMStudent--此處有FROM的語(yǔ)法錯(cuò)誤WHERESex='男'GO注意:當(dāng)前數(shù)據(jù)庫(kù)為L(zhǎng)ibrary,因?yàn)樵诘诙€(gè)批處理中出現(xiàn)了語(yǔ)法錯(cuò)誤,USEEDUC沒(méi)有得到執(zhí)行,而第一個(gè)批處理USELibrary得到了執(zhí)行。2.批處理中的錯(cuò)誤提示四、批處理103【例9-39】批處理中的不同錯(cuò)誤的結(jié)果對(duì)比。代碼段2:USELibraryGOUSEEDUCSELECTSID,Sname,SexFROMStudent_error--此處有表名不存在的運(yùn)行錯(cuò)誤WHERESex='男'GO2.批處理中的錯(cuò)誤提示四、批處理104例39:批處理中的不同錯(cuò)誤的結(jié)果對(duì)比。代碼段2:USELibraryGOUSEEDUCSELECTSID,Sname,SexFROMStudent_error--此處有表名不存在的運(yùn)行錯(cuò)誤WHERESex='男'GO注意:當(dāng)前數(shù)據(jù)庫(kù)為EDUC,即第二個(gè)批處理得到了部分執(zhí)行,但在第二句中出現(xiàn)了運(yùn)行錯(cuò)誤,該語(yǔ)句以下的語(yǔ)句不再執(zhí)行。2.批處理中的錯(cuò)誤提示

單元2.7T-SQL編程與應(yīng)用105T-SQL編程基礎(chǔ)一表達(dá)式二流程控制語(yǔ)句三批處理四事務(wù)五五、事務(wù)106事務(wù):指一個(gè)單元的工作,這些工作要么全做,要么全不做。作為一個(gè)邏輯單元,必須具備以下4個(gè)屬性。原子性(Atomic):必須執(zhí)行一個(gè)完整的工作。一致性(Consistent):必須使所有數(shù)據(jù)都具有一致的狀態(tài)。獨(dú)立性(Isolated):并行事務(wù)的修改必須與其他并行事務(wù)的修改相互獨(dú)立。持久性(Durable):事務(wù)完成之后,它的影響永久性地存在于系統(tǒng)中,也就是把這種修改寫(xiě)到了數(shù)據(jù)庫(kù)中。1.什么是事務(wù)五、事務(wù)107語(yǔ)法:BEGINTRANSACTION[事務(wù)名|事務(wù)變量名]WITHMARK['描述符']說(shuō)明:BEGINTRANSACTION語(yǔ)句執(zhí)行時(shí),全局變量@@TRANCOUNT的值將加1,@@TRANCOUNT表示當(dāng)前連接中現(xiàn)有事務(wù)的數(shù)目。2.事務(wù)語(yǔ)句——開(kāi)始事務(wù)五、事務(wù)108語(yǔ)法:COMMINTTRANSACTION[事務(wù)名|事務(wù)變量名]說(shuō)明:COMMITTRANSACTION語(yǔ)句執(zhí)行時(shí),全局變量@@TRANCOUNT的值將減1。2.事務(wù)語(yǔ)句——提交事務(wù)五、事務(wù)109【例9-39】開(kāi)始一個(gè)事務(wù),對(duì)圖書(shū)表“Book”中清華大學(xué)出版社的圖書(shū)價(jià)格折價(jià)90%并查詢其折價(jià)的結(jié)果,再用事務(wù)提交語(yǔ)句進(jìn)行提交。代碼:USELibraryGO--******************事務(wù)前******************--SELECT'Befor'AS事務(wù)前,BID,Bname,Publisher,PriceFROMBookWHEREPublisher='清華大學(xué)出版社’2.事務(wù)語(yǔ)句五、事務(wù)110--**********

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論