




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、5.15.25.35.45.55.6常量、變量與數(shù)據(jù)類型常量、變量與數(shù)據(jù)類型運(yùn)算符與表達(dá)式運(yùn)算符與表達(dá)式流程控制語句流程控制語句系統(tǒng)內(nèi)置函數(shù)系統(tǒng)內(nèi)置函數(shù)用戶定義函數(shù)用戶定義函數(shù)綜合應(yīng)用訓(xùn)練綜合應(yīng)用訓(xùn)練T-SQL語言由以下幾部分組成:(1)數(shù)據(jù)定義語言(DDL)。用于執(zhí)行數(shù)據(jù)庫的任務(wù),對(duì)數(shù)據(jù)庫以及數(shù)據(jù)庫中的各種對(duì)象進(jìn)行創(chuàng)建、刪除、修改等操作。如前所述,數(shù)據(jù)庫對(duì)象主要包括:表、缺省約束、規(guī)則、視圖、觸發(fā)器、存儲(chǔ)過程。DDL包括的主要語句及功能如表5.1所示。語句功能說明CREATE創(chuàng)建數(shù)據(jù)庫或數(shù)據(jù)庫對(duì)象不同數(shù)據(jù)庫對(duì)象,其CREATE語句的語法形式不同ALTER對(duì)數(shù)據(jù)庫或數(shù)據(jù)庫對(duì)象進(jìn)行修改不同數(shù)據(jù)庫
2、對(duì)象,其ALTER語句的語法形式不同DROP刪除數(shù)據(jù)庫或數(shù)據(jù)庫對(duì)象不同數(shù)據(jù)庫對(duì)象,其DROP語句的語法形式不同表5.1 DDL主要語句及功能(2)數(shù)據(jù)操縱語言(DML)。用于操縱數(shù)據(jù)庫中各種對(duì)象,檢索和修改數(shù)據(jù)。DML包括的主要語句及功能如表5.2所示。語句功能說明SELECT從表或視圖中檢索數(shù)據(jù)是使用最頻繁的SQL語句之一INSERT將數(shù)據(jù)插入到表或視圖中UPDATE修改表或視圖中的數(shù)據(jù)既可修改表或視圖的一行數(shù)據(jù),也可修改一組或全部數(shù)據(jù)DELETE從表或視圖中刪除數(shù)據(jù)可根據(jù)條件刪除指定的數(shù)據(jù)表5.2 DML主要語句及功能(3)數(shù)據(jù)控制語言(DCL)。用于安全管理,確定哪些用戶可以查看或修改數(shù)
3、據(jù)庫中的數(shù)據(jù),DCL包括的主要語句及功能如表5.3所示。語句功能說明GRANT授予權(quán)限可把語句許可或?qū)ο笤S可的權(quán)限授予其他用戶和角色REVOKE收回權(quán)限與GRANT的功能相反,但不影響該用戶或角色從其他角色中作為成員繼承許可權(quán)限D(zhuǎn)ENY收回權(quán)限,并禁止從其他角色繼承許可權(quán)限功能與REVOKE相似,不同之處:除收回權(quán)限外,還禁止從其他角色繼承許可權(quán)限表5.3 DCL主要語句及功能(4)T-SQL增加的語言元素。這部分不是ANSI SQL-99所包含的內(nèi)容,而是微軟為了用戶編程的方便增加的語言元素。這些語言元素包括變量、運(yùn)算符、函數(shù)、流程控制語句等。這些T-SQL語句都可以在查詢分析器中交互執(zhí)行。
4、本章將介紹這部分增加的語言元素。5.1.1 常量常量1字符串常量分為ASCII字符串常量和Unicode 字符串常量。(1)ASCII字符串常量。ASCII字符串常量是用單引號(hào)括起來,由ASCII字符構(gòu)成的符號(hào)串。ASCII字符串常量舉例:ChinaHow do you!OBbaar/*如果單引號(hào)中的字符串包含引號(hào),可以使用兩個(gè)單引號(hào)表示嵌入的單引號(hào)。*/(2)Unicode 字符串常量。Unicode 字符串常量與ASCII字符串常量相似,但它前面有一個(gè) N 標(biāo)識(shí)符(N 代表 SQL-92 標(biāo)準(zhǔn)中的國際語言(National Language)。N 前綴必須大寫。Unicode 字符串常量舉
5、例:NChina NHow do you!5money常量money常量是以“$”作為前綴的一個(gè)整型或?qū)嵭统A繑?shù)據(jù)。下面是money常量的例子:$12$542023-$45.56+$423456.991系統(tǒng)數(shù)據(jù)類型系統(tǒng)數(shù)據(jù)類型又稱為基本數(shù)據(jù)類型。在第3章已詳細(xì)地介紹了系統(tǒng)數(shù)據(jù)類型,此處不再贅述。2用戶自定義數(shù)據(jù)類型例如:在圖書借閱系統(tǒng)中XSBOOK數(shù)據(jù)庫,創(chuàng)建了XS、BOOK、JY三個(gè)表,從三個(gè)表的表結(jié)構(gòu)可看出:表XS中的借書證號(hào)字段值與表JY中的借書證號(hào)字段值應(yīng)有相同的類型,均為字符型值、長度可定義為8,并且不允許為空值,為了使用方便,并使含義明確,可以先定義一數(shù)據(jù)類型,命名為:librar
6、y_card_num,用于描述借書證號(hào)的類型屬性,然后將表XS中的借書證號(hào)字段和表JY中的借書證號(hào)字段定義為library_card_num數(shù)據(jù)類型。自定義數(shù)據(jù)類型library_card_num后,重新設(shè)計(jì)XSBOOK數(shù)據(jù)庫中XS、JY表結(jié)構(gòu)中的借書證號(hào)字段,如表5.4表5.6所示依賴的系統(tǒng)類型值允許的長度為 空 性char8NOT NULL表5.4 自定義類型library_card_num字 段 名類 型字 段 名類 型借書證號(hào)library_card_num借書證號(hào)library_card_num表5.5 表XS中借書證號(hào)字段的重新設(shè)計(jì) 表5.6 表JY中借書證號(hào)字段的重新設(shè)計(jì)創(chuàng)建用戶
7、自定義數(shù)據(jù)類型的方法如下:(1)使用“對(duì)象資源管理器”定義。步驟如下: 啟動(dòng)“SQL Server Management Studio”在“對(duì)象資源管理器”中展開“數(shù)據(jù)庫”“XSBOOK”“可編程性”右擊“類型”,選擇“新建”選項(xiàng),再選擇“新建用戶定義數(shù)據(jù)類型”,彈出“新建用戶定義數(shù)據(jù)類型”窗口。 在“名稱”文本框中輸入自定義的數(shù)據(jù)類型名稱,如Library_card_num。在“數(shù)據(jù)類型”下拉框中選擇自定義數(shù)據(jù)類型所基于的系統(tǒng)數(shù)據(jù)類型char。在“長度”欄中填寫要定義的數(shù)據(jù)類型的長度8。其他選項(xiàng)使用默認(rèn)值,如圖5.1所示,單擊“確定”按鈕即可完成創(chuàng)建。圖5.1 用戶數(shù)據(jù)類型定義屬性窗口(2)
8、使用CREATE TYPE命令定義。在SQL Server 2008中,使用CRETAE TYPE語句來實(shí)現(xiàn)用戶數(shù)據(jù)類型的定義。語法格式:CREATE TYPE schema_name. type_name FROM base_type ( precision , scale ) NULL | NOT NULL ; 根據(jù)上述語法,定義描述借書證號(hào)字段的數(shù)據(jù)類型的語句如下:CREATE TYPE library_card_numFROM char(8) NOT NULL(3)刪除用戶自定義數(shù)據(jù)類型。在SSMS中刪除用戶自定義數(shù)據(jù)類型的主要步驟如下:在“對(duì)象資源管理器”中展開數(shù)據(jù)庫“XSBOOK”
9、“可編程性”“類型”在“用戶定義數(shù)據(jù)類型”中選擇類型“dbo.library_card_num”,右擊鼠標(biāo),在彈出的快捷菜單中選擇“刪除”菜單項(xiàng),打開“刪除對(duì)象”窗口后單擊“確定”按鈕即可(實(shí)際不做操作)。說明:如果用戶自定義數(shù)據(jù)類型在數(shù)據(jù)庫中被引用,刪除操作將不被允許。(4)使用命令刪除用戶自定義數(shù)據(jù)類型。使用命令方式刪除自定義數(shù)據(jù)類型可以使用DROP TYPE語句。語法格式:DROP TYPE schema_name. type_name ; 例如,刪除前面定義的library_card_num類型的語句為:DROP TYPE library_card_num(5)利用用戶自定義數(shù)據(jù)類型定
10、義字段。在定義類型后,接著應(yīng)考慮定義這種類型的字段,同樣可以利用“對(duì)象資源管理器”和“T-SQL命令”兩種方式實(shí)現(xiàn)。讀者可以參照第2章進(jìn)行定義,不同點(diǎn)只是數(shù)據(jù)類型為用戶自定義類型,而不是系統(tǒng)類型。例如,在“對(duì)象資源管理器”中對(duì)于XS表借書證號(hào)字段的定義如圖5.2所示。 定義 student_num 后, 設(shè)計(jì)表結(jié)構(gòu)時(shí)此 類型可用 圖5.2 使用用戶自定義數(shù)據(jù)類型定義XS表3用戶自定義表數(shù)據(jù)類型SQL Server 2008還提供了一種新的用戶自定義數(shù)據(jù)類型,稱為用戶自定義表數(shù)據(jù)類型(User-defined Table Types)。這種數(shù)據(jù)類型也是由用戶自行定義,可以作為參數(shù)提供給語句、存儲(chǔ)
11、過程或者函數(shù)。創(chuàng)建自定義表數(shù)據(jù)類型也使用CREATE TYPE語句,語法格式如下:CREATE TYPE schema_name. type_name AS TABLE ( ,.n ) ; 【例5.1】 創(chuàng)建用戶自定義表數(shù)據(jù)類型,包含JY表中的所有列。CREATE TYPE JY_tabletypeAS TABLE(借書證號(hào)char(8)NOT NULL,ISBN char(16) NOT NULL,索書號(hào)char(10) NOT NULL PRIMARY KEY,借書時(shí)間date)1變量變量名必須是一個(gè)合法的標(biāo)識(shí)符。(1)標(biāo)識(shí)符在SQL Server中標(biāo)識(shí)符分為兩類: 常規(guī)標(biāo)識(shí)符。以ASCI
12、I字母、Unicode字母、下劃線(_)、或#開頭,可后續(xù)一個(gè)或若干個(gè)ASCII字符、Unicode字符、下劃線(_)、美元符號(hào)($)、或#,但不能全為下劃線(_)、或#。 分隔標(biāo)識(shí)符。包含在雙引號(hào) () 或者方括號(hào) ( ) 內(nèi)的常規(guī)標(biāo)識(shí)符或不符合常規(guī)標(biāo)識(shí)符規(guī)則的標(biāo)識(shí)符。標(biāo)識(shí)符允許的最大長度為128個(gè)字符。符合常規(guī)標(biāo)識(shí)符格式規(guī)則的標(biāo)識(shí)符可以分隔,也可以不分隔。對(duì)不符合標(biāo)識(shí)符規(guī)則的標(biāo)識(shí)符必須進(jìn)行分隔。(2)變量的分類SQL Server中變量可分為兩類: 全局變量。全局變量由系統(tǒng)提供且預(yù)先聲明,通過在名稱前加兩個(gè)“”符號(hào)區(qū)別于局部變量。T-SQL 全局變量作為函數(shù)引用。例如,ERROR返回執(zhí)行的
13、上一個(gè)T-SQL語句的錯(cuò)誤號(hào);CONNECTIONS返回自上次啟動(dòng)SQL Server以來連接或試圖連接的次數(shù)。全局變量的意義及使用請(qǐng)參考附錄A。 局部變量。局部變量用于保存數(shù)據(jù)值。例如,保存運(yùn)算的中間結(jié)果,作為循環(huán)變量等。2局部變量的使用(1)局部變量的定義與賦值 局部變量的定義在批處理或過程中用 DECLARE 語句聲明局部變量,所有局部變量在聲明后均初始化為NULL。語法格式: DECLARE local_variable data_type = value ,.n參數(shù)含義:llocal_variable:局部變量名,應(yīng)為常規(guī)標(biāo)識(shí)符。前面的表示是局部變量。ldata_type:數(shù)據(jù)類型,
14、用于定義局部變量的類型,可為系統(tǒng)類型或自定義類型。l=value:為變量賦值,值可以是常量或表達(dá)式,但它必須與變量聲明類型匹配。ln:表示可定義多個(gè)變量,各變量間用逗號(hào)隔開。 局部變量的賦值定義局部變量后,可用SET或SELECT語句給其賦值。用SET語句賦值,語法格式:SET local_variableexpression參數(shù)含義:local_variable是除 cursor、text、ntext、 image 、table外的任何類型的變量名。變量名必須以“”符號(hào)開頭。expression是任何有效的SQL Server表達(dá)式。功能:為局部變量賦值,該局部變量必須是用DECLARE語句
15、已定義的。【例5.2】 創(chuàng)建局部變量var1、var2,并賦值,然后輸出變量的值。DECLARE var1 char(10), var2 char(30)SET var1中國 /*一個(gè)SET語句只能給一個(gè)變量賦值*/SET var2var1+ 是一個(gè)偉大的國家SELECT var1, var2語句的執(zhí)行結(jié)果如圖5.3所示?!纠?.3】 創(chuàng)建一個(gè)名為sex的局部變量,并在 SELECT 語句中使用該局部變量查找表XS中所有男同學(xué)的借書證號(hào)、姓名。DECLARE sex bitSET sex=1SELECT 借書證號(hào),姓名FROM XSWHERE 性別=sex【例5.4】 將查詢結(jié)果賦給變量。US
16、E XSBOOKDECLARE student char(8)SET student=(SELECT 姓名 FROM XS WHERE 借書證號(hào)= 10000001)SELECT student【例5.5】 使用SELECT給局部變量賦值。DECLARE var1 nvarchar(30)SELECT var1 =劉豐SELECT var1 AS NAME1算術(shù)運(yùn)算符算術(shù)運(yùn)算符在兩個(gè)表達(dá)式上執(zhí)行數(shù)學(xué)運(yùn)算,這兩個(gè)表達(dá)式可以是任何數(shù)字?jǐn)?shù)據(jù)類型。算術(shù)運(yùn)算符有:+(加)、-(減)、*(乘)、/(除)和%(求模)五種運(yùn)算。+(加)和(減)運(yùn)算符也可用于對(duì)datetime及smalldatetime值進(jìn)行
17、算術(shù)運(yùn)算。 2位運(yùn)算符位運(yùn)算符用于實(shí)現(xiàn)兩個(gè)表達(dá)式之間的位操作,這兩個(gè)表達(dá)式的類型可為整型或與整型兼容的數(shù)據(jù)類型(如:字符型,等,但不能為 image 類型),位運(yùn)算符如表5.7所示。運(yùn)算符運(yùn)算規(guī)則運(yùn)算名稱&兩個(gè)位均為1時(shí),結(jié)果為1,否則為0按位與|只要一個(gè)位為1,結(jié)果為1,否則為0按位或兩個(gè)位值不同時(shí),結(jié)果為1,否則為0按位異或表5.7 位運(yùn)算符4邏輯運(yùn)算符邏輯運(yùn)算符用于對(duì)某個(gè)條件進(jìn)行測試,運(yùn)算結(jié)果為TRUE或FALSE。SQL Server提供的邏輯運(yùn)算符如表5.9所示。這里的邏輯運(yùn)算符在SELECT語句的WHERE子句中使用過,此處再做一些補(bǔ)充。運(yùn)算符運(yùn)算規(guī)則AND如果兩個(gè)操作數(shù)值都為TR
18、UE,運(yùn)算結(jié)果為 TRUE。OR如果兩個(gè)操作數(shù)中有一個(gè)為TRUE,運(yùn)算結(jié)果為TRUE。NOT若一個(gè)操作數(shù)值為TRUE,運(yùn)算結(jié)果為FALSE,否則為TRUE。ALL如果每個(gè)操作數(shù)值都為TRUE,運(yùn)算結(jié)果為TRUE。ANY在一系列操作數(shù)中只要有一個(gè)為 TRUE,運(yùn)算結(jié)果為TRUE。BETWEEN如果操作數(shù)在指定的范圍內(nèi),運(yùn)算結(jié)果為TRUE。EXISTS如果子查詢包含一些行,運(yùn)算結(jié)果為TRUE。IN如果操作數(shù)值等于表達(dá)式列表中的一個(gè),運(yùn)算結(jié)果為TRUE。LIKE如果操作數(shù)與一種模式相匹配,運(yùn)算結(jié)果為TRUE。SOME如果在一系列操作數(shù)中,有些值為TRUE,運(yùn)算結(jié)果為TRUE。表5.9 邏輯運(yùn)算符(1
19、)ANY、SOME、ALL、IN的使用可以將 ALL 或 ANY 關(guān)鍵字與比較運(yùn)算符組合進(jìn)行子查詢。SOME的用法與ANY相同。以 比較運(yùn)算符為例:ALL 表示大于每一個(gè)值,即大于最大值。例如:ALL (5, 2, 3) 表示大于 5,因此,使用ALL的子查詢也可用MAX集函數(shù)實(shí)現(xiàn)。ANY 表示至少大于一個(gè)值,即大于最小值。因此 ANY (7, 2, 3) 表示大于 2,因此,使用ANY的子查詢也可用MIN集函數(shù)實(shí)現(xiàn)。=ANY 運(yùn)算符與 IN 等效。ALL 與 NOT IN 等效。(2)BETWEEN的使用(3)LIKE的使用(4)EXISTS的使用5字符串聯(lián)接運(yùn)算符通過運(yùn)算符“+”實(shí)現(xiàn)兩個(gè)字
20、符串的聯(lián)接運(yùn)算。【例5.15】 多個(gè)字符串的聯(lián)接。SELECT (借書證號(hào)+ , + 姓名) AS 借書證號(hào)及姓名FROM XSWHERE 借書證號(hào)= 10000001語句執(zhí)行結(jié)果如圖5.8所示。運(yùn)算符優(yōu)先級(jí)如表5.11所示。在一個(gè)表達(dá)式中按先高(優(yōu)先級(jí)數(shù)字小)后低(優(yōu)先級(jí)數(shù)字大)的順序進(jìn)行運(yùn)算。運(yùn) 算 符優(yōu) 先 級(jí)運(yùn) 算 符優(yōu) 先 級(jí)+(正)、-(負(fù))、(按位 NOT)1NOT6*(乘)、/(除)、%(模)2AND7+(加)、+(串聯(lián))、-(減)3ALL、ANY、BETWEEN、IN、LIKE、OR、SOME8=, , =, =, , !=, !, !(SELECT AVG(價(jià)格) FROM
21、 book)BEGINSET text1=計(jì)算機(jī)網(wǎng)絡(luò)的價(jià)格+cast(price as char(5)SET text1=text1+高于平均價(jià)格END ELSEBEGINSET text1=計(jì)算機(jī)網(wǎng)絡(luò)的價(jià)格+cast(price as char(5)SET text1=text1 + 低于平均價(jià)格。END SELECT text11WHILE循環(huán)語句如果需要重復(fù)執(zhí)行程序中的一部分語句,可使用WHILE循環(huán)語句實(shí)現(xiàn)。語法格式:WHILE Boolean_expression /*條件表達(dá)式*/ sql_statement | statement_block /*T-SQL語句序列構(gòu)成的循環(huán)體*
22、/WHILE循環(huán)語句的執(zhí)行流程如圖5.10所示。圖5.10 WHILE語句的執(zhí)行流程【例5.18】 顯示字符串China中每個(gè)字符的 ASCII 值和字符。DECLARE position int, string char(8)SET position = 1SET string = ChinaWHILE position =3 and 庫存量=3 and 庫存量10GO4日期時(shí)間函數(shù) 日期函數(shù)可用在 SELECT 語句的選擇列表或用在查詢的 WHERE 子句中。(1)GETDATE函數(shù)語法格式:GETDATE ( )功能:按SQL Server標(biāo)準(zhǔn)內(nèi)部格式返回當(dāng)前系統(tǒng)日期和時(shí)間。返回值類型:
23、datetime。(2)DATEPAR函數(shù)語法格式:DATEPART(datepart,date)功能:按datepart指定格式返回日期,返回值類型為int。參數(shù)類型與取值:datepart的取值如表5.17所示。函數(shù)調(diào)用時(shí),datepart的取值可為非縮寫形式或縮寫形式。參數(shù)date的類型應(yīng)為datetime或smalldatetime。Datepart取值縮寫形式函數(shù)返回的值yearyy, yyyy年份quarterqq, q季度Monthmm, m月dayofyeardy, y一年的第幾天Daydd, d日Weekwk, ww第幾周Hourhh小時(shí)minutemi, n分鐘second
24、ss, s秒millisecondms毫秒表5.17 Datepart的取值(3)DATEDIFF函數(shù)語法格式:DATEDIFF(datepart,startdate,enddate)功能:按datepart指定的內(nèi)容,返回startdate,enddate兩個(gè)指定的日期時(shí)間之間的間隔,間隔可以以年、季度、月、周、天數(shù)或小時(shí)等為單位,這取決于datepart的取值。參數(shù)類型與取值:datepart的取值范圍如表5.17所示。startdate,enddate為datetime 或 smalldatetime類型的值或變量,也可為日期格式的字符串表達(dá)式。【例5.30】 編寫程序根據(jù)讀者的出生時(shí)間
25、,計(jì)算其年齡。USE XSBOOKDECLARE startdate datetimeSET startdate = getdate()SELECT DATEDIFF(yy,出生時(shí)間,startdate ) AS 年齡FROM XS(4)YEAR、MONTH、DAY函數(shù)這三個(gè)函數(shù)分別返回指定日期的年、月、天部分,返回值都為整數(shù)。語法格式:YEAR(date)MONTH(date)DAY(date)6元數(shù)據(jù)函數(shù)元數(shù)據(jù)用于描述數(shù)據(jù)庫和數(shù)據(jù)庫對(duì)象。元數(shù)據(jù)函數(shù)用于返回?cái)?shù)據(jù)庫和數(shù)據(jù)庫對(duì)象的有關(guān)信息。(1)DB_ID語法格式:DB_ID ( database_name ) 功能:系統(tǒng)創(chuàng)建數(shù)據(jù)庫時(shí),自動(dòng)為其
26、創(chuàng)建一個(gè)標(biāo)識(shí)號(hào),函數(shù)DB_ID根據(jù)database_name指定的數(shù)據(jù)庫名,返回其數(shù)據(jù)庫標(biāo)識(shí) (ID) 號(hào),如果參數(shù)database_name不指定,則返回當(dāng)前數(shù)據(jù)庫ID。返回值類型:smallint。(2)DB_NAME語法格式:DB_NAME ( database_id ) 功能:根據(jù)參數(shù)database_id所給的數(shù)據(jù)庫標(biāo)識(shí)號(hào),返回?cái)?shù)據(jù)庫名。參數(shù)database_id 類型為 smallint,如果沒有指定 數(shù)據(jù)庫標(biāo)識(shí)號(hào),則返回當(dāng)前數(shù)據(jù)庫名。返回值類型:nvarchar(128)5.5.1 系統(tǒng)表系統(tǒng)表sysobjects在此介紹系統(tǒng)表sysobjects的主要字段,如表5.20所示。字
27、段名類型含義namesysname對(duì)象名idint對(duì)象標(biāo)示符typechar(2)對(duì)象類型??梢允窍铝兄抵唬篊:CHECK 約束;D:默認(rèn)值或 DEFAULT 約束;F: FOREIGN KEY 約束;FN: 標(biāo)量函數(shù);IF:內(nèi)嵌表函數(shù);K:PRIMARY KEY 或 UNIQUE 約束;L:日志;P: 存儲(chǔ)過程;R:規(guī)則;RF:復(fù)制篩選存儲(chǔ)過程;S:系統(tǒng)表;TF:表值函數(shù);TR:觸發(fā)器;U:用戶表;V:視圖;X:擴(kuò)展存儲(chǔ)過程。表5.20 系統(tǒng)表sysobjects的主要字段標(biāo)量函數(shù)的一般定義形式如下:CREATE FUNCTION 所有者名. 函數(shù)名( 參數(shù)1 AS 類型1 = 默認(rèn)值 )
28、 ,.參數(shù)n AS 類型n = 默認(rèn)值 ) RETURNS 返回值類型 WITH 選項(xiàng) AS BEGIN函數(shù)體RETURN 標(biāo)量表達(dá)式END【例5.32】 定義一個(gè)函數(shù),按性別計(jì)算當(dāng)前所有讀者的平均年齡。 為了計(jì)算平均年齡,創(chuàng)建如下視圖:CREATE VIEW VIEW_AGEAS SELECT 借書證號(hào),性別,datepart(yyyy,GETDATE ( )-datepart(yyyy,出生時(shí)間) as 年齡FROM XS 創(chuàng)建函數(shù)aver_age,用于按性別計(jì)算當(dāng)前讀者的平均年齡。CREATE FUNCTION aver_age(sex bit) RETURNS intASBEGINDE
29、CLARE aver intSELECT aver=( SELECT avg(年齡) FROM VIEW_AGE WHERE 性別=SEX)RETURN averEND(2)標(biāo)量函數(shù)的調(diào)用當(dāng)調(diào)用用戶定義的標(biāo)量函數(shù)時(shí),必須提供至少由兩部分組成的名稱(所有者名.函數(shù)名)。可按以下方式調(diào)用標(biāo)量函數(shù): 在SELECT語句中調(diào)用。調(diào)用形式:架構(gòu)名.函數(shù)名(實(shí)參1,實(shí)參n)實(shí)參可為已賦值的局部變量或表達(dá)式?!纠?.33】 如下程序?qū)ι侠x的aver_age函數(shù)進(jìn)行調(diào)用。USE XSBOOK /*用戶函數(shù)在此數(shù)據(jù)庫中已定義*/*定義局部變量*/DECLARE sex bitDECLARE aver1 in
30、t/*給局部變量賦值*/SELECT sex = 1SELECT aver1=dbo.aver_age(sex) /*調(diào)用用戶函數(shù),并將返回值賦給局部變量*/*顯示局部變量的值*/SELECT aver1 AS 男性讀者的平均年齡 語句的執(zhí)行結(jié)果如圖5.11所示。用T-SQL的EXECUTE(EXEC)語句調(diào)用用戶函數(shù)時(shí),參數(shù)的標(biāo)識(shí)次序與函數(shù)定義中的參數(shù)標(biāo)識(shí)次序可以不同。有關(guān)EXEC語句的具體格式在第7章中介紹。調(diào)用形式:EXEC 變量名=架構(gòu)名名.函數(shù)名 實(shí)參1,實(shí)參n 或EXEC變量名=架構(gòu)名.函數(shù)名 形參名1=實(shí)參1, 形參名n=實(shí)參n如果函數(shù)的參數(shù)有默認(rèn)值,在調(diào)用該函數(shù)時(shí)必須指定“default”關(guān)鍵字才能獲得默認(rèn)值。這不同于存儲(chǔ)過程中有默認(rèn)值的參數(shù),在存儲(chǔ)過程中省略參數(shù)也意味著使用默認(rèn)值?!纠?.34】 利用EXEC調(diào)用用戶定義函數(shù)aver_age。DECLARE aver1 int/*顯示局部變量的值*/EXEC aver1 = dbo.aver_age sex = 0/*通過EXEC調(diào)用用戶函數(shù),并將返回值賦給局部變量*/SELECT aver1 AS 女性讀者的平均年齡GO語句執(zhí)行結(jié)果如圖5.12所示。2內(nèi)嵌表值函數(shù)內(nèi)嵌表值函數(shù)是返回記錄集的用戶自定義函數(shù),可用于實(shí)現(xiàn)參數(shù)化視圖的功能。例如,有如下視圖:CREATE VIEW View1 A
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 融資投資協(xié)議
- 合伙投資協(xié)議書范本
- 基本知識(shí)培訓(xùn)班課件
- 從哲學(xué)視角審視經(jīng)濟(jì)增長方式轉(zhuǎn)變:理論、實(shí)踐與啟示
- 中資保險(xiǎn)公司競爭力提升路徑探究
- 萬古霉素給藥策略對(duì)谷濃度及嚴(yán)重膿毒癥療效的影響探究
- E-選擇素與CD11b在大鼠頸動(dòng)脈吻合口的表達(dá)及對(duì)血管修復(fù)機(jī)制的影響探究
- 八年級(jí)數(shù)學(xué)全等復(fù)習(xí)單元試卷及答案
- 基層醫(yī)院兒科培訓(xùn)課件
- 新解讀《GB-T 39704-2020真空絕熱板有效導(dǎo)熱系數(shù)的測定》
- 《關(guān)愛女性健康》課件
- 香料改擴(kuò)建項(xiàng)目環(huán)境影響報(bào)告書
- 銀行系統(tǒng)的廉潔文化建設(shè)
- 小學(xué)科學(xué)儀器室建設(shè)標(biāo)準(zhǔn)(二類)
- 5S管理知識(shí)之現(xiàn)場改善培訓(xùn)課件
- 產(chǎn)科手術(shù)病人的護(hù)理-胎頭吸引術(shù)(婦產(chǎn)科護(hù)理課件)
- 輔警考試公安基礎(chǔ)知識(shí)考試真題庫附答案
- 32式太極劍劍譜
- GB/T 33630-2017海上風(fēng)力發(fā)電機(jī)組防腐規(guī)范
- GB/T 328.21-2007建筑防水卷材試驗(yàn)方法第21部分:高分子防水卷材接縫剝離性能
- 供應(yīng)商大會(huì)-質(zhì)量報(bào)告課件
評(píng)論
0/150
提交評(píng)論