SQL第3章Transact-SQL語(yǔ)言.ppt
《SQL第3章Transact-SQL語(yǔ)言.ppt》由會(huì)員分享,可在線閱讀,更多相關(guān)《SQL第3章Transact-SQL語(yǔ)言.ppt(48頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、第3章 Transact-SQL程序設(shè)計(jì),3.1 SQL 語(yǔ)言簡(jiǎn)介 3.2 數(shù)據(jù)類(lèi)型 3.3 局部變量與全局變量 3.4 運(yùn)算符及優(yōu)先級(jí) 3.5 函數(shù) 3.6 簡(jiǎn)單的SELECT 語(yǔ)句 3.7 批處理與流程控制語(yǔ)句,返回目錄,2,3.1 SQL 語(yǔ)言簡(jiǎn)介,SQL (Structure Query Language) 語(yǔ)言是一種在關(guān)系型數(shù)據(jù)庫(kù)中定義、查詢(xún)、操縱和控制數(shù)據(jù)的標(biāo)準(zhǔn)語(yǔ)句。 大多數(shù)據(jù)庫(kù)廠商都在SQL-92標(biāo)準(zhǔn)的基礎(chǔ)上對(duì)SQL又進(jìn)行了一定的擴(kuò)充,產(chǎn)生了事務(wù)化的SQL語(yǔ)言,即Transact SQL語(yǔ)言,簡(jiǎn)稱(chēng)T-SQL語(yǔ)言。,3,語(yǔ)言簡(jiǎn)介,SQL 語(yǔ)言是一種面向集合的數(shù)據(jù)庫(kù)語(yǔ)言,其主要特點(diǎn)
2、是: 類(lèi)似于英語(yǔ),直觀、簡(jiǎn)單易學(xué); SQL語(yǔ)言只是提出要“干什么”,“怎么辦”則由DBMS來(lái)完成。 SQL語(yǔ)句分為四類(lèi):數(shù)據(jù)查詢(xún)語(yǔ)句、數(shù)據(jù)操縱語(yǔ)句、數(shù)據(jù)定義語(yǔ)句和數(shù)據(jù)控制語(yǔ)句; SQL語(yǔ)句既可以獨(dú)立,也可以嵌入到另外一種語(yǔ)句中使用的語(yǔ)句,即具有自含型和縮主型兩種特征。自含型特征可以用于所有用戶(hù),縮主型適合于應(yīng)用程序員開(kāi)發(fā)數(shù)據(jù)庫(kù)應(yīng)用程序。,4,語(yǔ)言簡(jiǎn)介,數(shù)據(jù)操作語(yǔ)句 select、 insert 、 delete 、 update 數(shù)據(jù)定義語(yǔ)句 create table 、 drop table 、 alter table create view 、 drop view create index
3、 、drop index create procedure 、 alter procedure 、 drop procedure create trigger 、 alter trigger、 drop trigger 數(shù)據(jù)訪問(wèn)控制 grant 、 revoke 事務(wù)控制語(yǔ)句 begin transaction/commit 、 rollback 、 set transaction 編程語(yǔ)句 declare 、 open 、fetch、 close、execute,5,數(shù)據(jù)庫(kù)管理員和應(yīng)用系統(tǒng)開(kāi)發(fā)人員用SQL語(yǔ)言可以做以下事情: 創(chuàng)建主鍵、外鍵、約束、規(guī)則、觸發(fā)器、事務(wù),用以實(shí)現(xiàn)數(shù)據(jù)完整性; 查
4、詢(xún)、更新、刪除數(shù)據(jù)庫(kù)中的信息; 對(duì)各種數(shù)據(jù)庫(kù)對(duì)象設(shè)置不同的權(quán)限、實(shí)現(xiàn)數(shù)據(jù)庫(kù)的安全性; 進(jìn)行分布式數(shù)據(jù)處理,實(shí)現(xiàn)數(shù)據(jù)庫(kù)間的數(shù)據(jù)復(fù)制、傳遞和執(zhí)行分布式查詢(xún); 可以創(chuàng)建批處理、存儲(chǔ)過(guò)程、視圖,方便應(yīng)用程序訪問(wèn)數(shù)據(jù)庫(kù)中的數(shù)據(jù); 實(shí)現(xiàn)數(shù)據(jù)倉(cāng)庫(kù),從聯(lián)機(jī)事務(wù)處理系統(tǒng)中提取數(shù)據(jù),對(duì)數(shù)據(jù)匯總進(jìn)行決策支持分析; 其他功能。,本章首頁(yè),6,3.2 數(shù)據(jù)類(lèi)型,數(shù)據(jù)類(lèi)型是指數(shù)據(jù)所代表的信息的類(lèi)型。每一種語(yǔ)言都定義了自己的數(shù)據(jù)類(lèi)型。 SQL Server 2000中定義了25種數(shù)據(jù)類(lèi)型,同時(shí)允許用戶(hù)自己定義數(shù)據(jù)類(lèi)型。 系統(tǒng)定義的數(shù)據(jù)類(lèi)型有: binary[(n)] 、varbinary[(n)]、char[(n)]、va
5、rchar[(n)]、nchar[(n)]、nvarchar[(n)]、datetime、smalldatetime、decimal[p(,s)]、numeric[p(,s)]、float[(n)]、real、int 、smallint、tinyint 、money、smallymoney、 bit、cursor、sysname、timestamp、uniqueidentifier、 text、image 和ntext;,7,3.2.1 二進(jìn)制數(shù)據(jù)類(lèi)型 二進(jìn)制數(shù)據(jù)類(lèi)型包括三種:binary 、varbinary和image。 binary [(n)]:固定長(zhǎng)度的n個(gè)字節(jié)二進(jìn)制數(shù)據(jù)。n必須是1到
6、8000。存儲(chǔ)空間大小為n+4字節(jié)。 varbinary[(n)]:n個(gè)字節(jié)可變長(zhǎng)二進(jìn)制數(shù)據(jù)。n必須從1到8000。存儲(chǔ)空間大小為實(shí)際數(shù)據(jù)長(zhǎng)度+4個(gè)字節(jié),而不是n個(gè)字節(jié)。 image:可變長(zhǎng)度的二進(jìn)制,其最大長(zhǎng)度為231-1個(gè)字節(jié)。 3.2.2 數(shù)字?jǐn)?shù)據(jù)類(lèi)型 數(shù)字?jǐn)?shù)據(jù)類(lèi)型包括精確數(shù)字、近似數(shù)字兩種。精確數(shù)字又分為精確整數(shù)和精確小數(shù)。 1.精確整數(shù) 精確整數(shù)數(shù)據(jù)類(lèi)型有四種,它們是bigint 、int、smallint、tinyint。 bigint:從-263到263-1的整型數(shù)據(jù)。存儲(chǔ)大小為8個(gè)字節(jié)。 int:從-231到231-1的整型數(shù)據(jù)。存儲(chǔ)大小為4個(gè)字節(jié)。,8,smallint:從-
7、215到215-1的整數(shù)數(shù)據(jù)。存儲(chǔ)大小為2個(gè)字節(jié)。 tinyint:從0到255的整數(shù)數(shù)據(jù)。存儲(chǔ)大小為1個(gè)字節(jié)。 bigint 的存儲(chǔ)范圍大大于int 的存儲(chǔ)范圍,int 的存儲(chǔ)范圍大于Smallint 的存儲(chǔ)范圍,Smallint的存儲(chǔ)范圍大于tinyint的存儲(chǔ)范圍。 2.精確小數(shù) 精確小數(shù)數(shù)據(jù)類(lèi)型有兩種:它們是decimal和numeric。 decimal :帶定點(diǎn)精度和小數(shù)位數(shù)的numeric數(shù)據(jù)類(lèi)型,從-1038+1到1038-1。 numeric:功能上等同decimal。 3.近似數(shù)字 近似小數(shù)數(shù)據(jù)類(lèi)型有兩種:float 和 real 。 float:從-1.79E+308到1
8、.79E+308的浮點(diǎn)精度數(shù)字。 real:從-3.04E+38到3.04E+38的浮點(diǎn)精度數(shù)字。,9,3.2.3 字符數(shù)據(jù)類(lèi)型 字符數(shù)據(jù)是用一對(duì)單引號(hào)括起來(lái)由字母、數(shù)字、和符號(hào)組合而成的數(shù)據(jù),在內(nèi)存中占用一個(gè)字節(jié)。例’Nanjing’、’3.23’、’&*op’都是合法的字符數(shù)據(jù)。字符數(shù)據(jù)類(lèi)型有char、varchar和text三種。 char:固定長(zhǎng)度的非unicode字符數(shù)據(jù),最大長(zhǎng)度為8000個(gè)字符; varchar:可變長(zhǎng)度的非unicode 字符數(shù)據(jù),最大長(zhǎng)度為8000個(gè)字符; text:可變長(zhǎng)度的非unicode 字符數(shù)據(jù),最大長(zhǎng)度為231-1個(gè)字符; 如果沒(méi)有在數(shù)據(jù)定義或變量聲
9、明語(yǔ)句中指定n,則默認(rèn)長(zhǎng)度為1。,10,3.2.4 unicode 數(shù)據(jù)類(lèi)型 對(duì)于用單個(gè)字節(jié)編碼每個(gè)字符的數(shù)據(jù)類(lèi)型,存在的問(wèn)題就是此數(shù)據(jù)類(lèi)型只能表示256個(gè)不同的字符。象漢字、日文或韓國(guó)文字這樣具有數(shù)千個(gè)字符的字母表就不可能處理了。 unicode標(biāo)準(zhǔn)每個(gè)字符用兩個(gè)字節(jié)來(lái)編碼,所以在系統(tǒng)中使用unicode數(shù)據(jù)類(lèi)型,就可以解決大字母表的字符問(wèn)題了。 unicode數(shù)據(jù)類(lèi)型包括nchar、nvarchar和ntext。 nchar:固定長(zhǎng)度的unicode 數(shù)據(jù),最大長(zhǎng)度為4000個(gè)字符。 nvarchar:可變長(zhǎng)度的unicode數(shù)據(jù),其最大長(zhǎng)度為4000字符。 ntext:可孌長(zhǎng)度的unic
10、oce數(shù)據(jù),其最大長(zhǎng)度為230-1個(gè)字符。 當(dāng)列的長(zhǎng)度固定不變時(shí),使用nchar數(shù)據(jù)類(lèi)型;當(dāng)列的長(zhǎng)度變化時(shí),使用nvarchar數(shù)據(jù)類(lèi)型;如果需要存儲(chǔ)的字符數(shù)多于4000個(gè)時(shí),應(yīng)使用ntext數(shù)據(jù)類(lèi)型存儲(chǔ)。,11,3.2.5 日期和時(shí)間數(shù)據(jù)類(lèi)型 日期和時(shí)間數(shù)據(jù)類(lèi)型包括datetime 和smalldatetime兩種數(shù)據(jù)類(lèi)型。 datetime:存儲(chǔ)從1753年1月1日到9999年12月31日的日期和時(shí)間數(shù)據(jù),每一個(gè)值要求8個(gè)字節(jié),精確到百分之三秒(或3.33毫秒)。 smalldatime:存儲(chǔ)從1900年1月1日到2079年12月31日的日期和時(shí)間數(shù)據(jù),每一個(gè)值要求4個(gè)字節(jié),精確到分鐘。
11、設(shè)置日期格式的命令如下: set dateformat {format |@format_var} 其中,format | @format 是日期的格式。有效參數(shù)包括MDY、DMY、YMD、YDM、MYD、DYM。默認(rèn)格式為MDY。 [例3-1] 設(shè)置日期格式 set dateformat mdy go declare @datevar datetime set @datevar =‘06/03/2006 select @datevar,12,3.2.6 貨幣數(shù)據(jù)類(lèi)型 貨幣數(shù)據(jù)類(lèi)型表示貨幣數(shù)量,貨幣數(shù)據(jù)類(lèi)型包括money和smallmoney。 money: 貨幣數(shù)值介于-263與263-1
12、之間,精確到貨幣單位的千分之十,money數(shù)據(jù)類(lèi)型要求8?jìng)€(gè)存儲(chǔ)字節(jié)。 smallmoney:貨幣數(shù)值介于-214748.3648與+214748.3647之間,精確到貨幣單位的千分之十,smallmoney數(shù)據(jù)類(lèi)型要求4個(gè)存儲(chǔ)字節(jié)。 3.2.7特殊數(shù)據(jù)類(lèi)型 在SQL中特殊的數(shù)據(jù)類(lèi)型有三種:bit、timestamp和uniqueidentifier。 bit:由1和0組成,使用bit數(shù)據(jù)類(lèi)型可以表示真、假或on、off,不能對(duì)bit的列使用索引。 timestamp:以二進(jìn)制格式表示SQL Server活動(dòng)的先后順序。在數(shù)據(jù)庫(kù)范圍內(nèi),timestamp是唯一的,每次更新行時(shí)進(jìn)行更新。 uniq
13、ueidentifer:全局唯一標(biāo)識(shí)符(GUID),以十六進(jìn)制數(shù)字表示一個(gè)全局惟一的標(biāo)識(shí)。,13,3.2.8 用戶(hù)自定義數(shù)據(jù)類(lèi)型 在SQL Server中,用戶(hù)可以根據(jù)需要自定義數(shù)據(jù)類(lèi)型。用戶(hù)可以用SQL語(yǔ)言或企業(yè)管理器來(lái)自定義數(shù)據(jù)類(lèi)型。 自定義數(shù)據(jù)類(lèi)型定義后,與系統(tǒng)數(shù)據(jù)類(lèi)型一樣使用。 創(chuàng)建自定義數(shù)據(jù)類(lèi)型的好處: 利用自定義數(shù)據(jù)類(lèi)型可使不同表不重復(fù)出現(xiàn)的各列數(shù)據(jù)具有相同的特性。 1.創(chuàng)建用戶(hù)自定義數(shù)據(jù)類(lèi)型 (1)使用SQL 語(yǔ)句創(chuàng)建 使用系統(tǒng)存儲(chǔ)過(guò)程sp_addtype創(chuàng)建,語(yǔ)法如下: sp_addtype type_name ,phystype[(length)|([precision,sc
14、ale]),null | not null | identity],14,,其中: type_name:是用戶(hù)定義的數(shù)據(jù)類(lèi)型的名字。 Phystype:是用戶(hù)自定義數(shù)據(jù)類(lèi)型所基于的系統(tǒng)數(shù)據(jù)類(lèi)型,可以包括長(zhǎng)度、精度、標(biāo)度。 null | not null | identity :用戶(hù)自定義數(shù)據(jù)類(lèi)型的性質(zhì),分別為允許空值、不允許為空值、具有標(biāo)識(shí)列性質(zhì)。如果不指定列的性質(zhì),默認(rèn)為not null 。,15,[例3-2] 創(chuàng)建兩個(gè)自定義數(shù)據(jù)類(lèi)型 use jwgl go exec sp_addtype a0 ,varchar(15),null exec sp_addtype postalcode,‘ch
15、ar(6)’,‘not null’ (2)使用企業(yè)管理器創(chuàng)建自定義數(shù)據(jù)類(lèi)型 進(jìn)入企業(yè)管理器?進(jìn)入JWGL數(shù)據(jù)庫(kù)?右擊“用戶(hù)自定義數(shù)據(jù)類(lèi)型”?點(diǎn)擊“新建用戶(hù)自定義數(shù)據(jù)類(lèi)型” ?后出現(xiàn)“用戶(hù)自定義數(shù)據(jù)類(lèi)型”窗口?輸入要定義的數(shù)據(jù)名稱(chēng),選擇數(shù)據(jù)類(lèi)型,輸入數(shù)據(jù)長(zhǎng)度,確定是否允許為空?點(diǎn)擊“確定”。,16,2.查看用戶(hù)自定義數(shù)據(jù)類(lèi)型 可以用系統(tǒng)存儲(chǔ)過(guò)程sp_help或企業(yè)管理器來(lái)查看用戶(hù)定義的數(shù)據(jù)類(lèi)型的特征。語(yǔ)法格式: exec sp_help 自定義數(shù)據(jù)類(lèi)型名稱(chēng) 3.重命名用戶(hù)自定義數(shù)據(jù)類(lèi)型 使用過(guò)程sp_rename 可以很方便地重新命名一個(gè)用戶(hù)自定義數(shù)據(jù)類(lèi)型。語(yǔ)法格式: exec s
16、p_rename 舊名稱(chēng) , 新名稱(chēng) 4.刪除用戶(hù)定義數(shù)據(jù)類(lèi)型 使用過(guò)程sp_droptype 來(lái)刪除一個(gè)已經(jīng)定義且未被使用的用戶(hù)自定義數(shù)據(jù)類(lèi)型。語(yǔ)法格式: exec sp_droptype 自定義數(shù)據(jù)類(lèi)型名 必須注意不能刪除正在被表或其他數(shù)據(jù)庫(kù)使用的用戶(hù)自定義數(shù)據(jù)類(lèi)型。,本章首頁(yè),17,3.3 局部變量與全局變量,從變量的作用范圍來(lái)區(qū)分,SQL Server提供兩種形式的變量:局部變量和全局變量。 1. 局部變量 局部變量一般在批處理中被聲明、定義、賦值和引用,批處理結(jié)束后,局部變量就消失了。 利用局部變量還可以保存程序執(zhí)行過(guò)程中的中間數(shù)據(jù)值,保存由存儲(chǔ)過(guò)程返回的數(shù)據(jù)值等。 (1)局部變
17、量的定義 必須先用DECLARE命令定義后才可以使用。 DECLAER {@local_variable data_type} [,…n] (2) 局部變量的賦值方法 SET { @local_variable = expression } 或者 SELECT { @local_variable = expression } [ ,...n ],18,expression:與局部定義的數(shù)據(jù)類(lèi)型相匹配的表達(dá)式。 賦值前變量默認(rèn)值為 NULL。 (3) 局部變量的顯示 select @variable_name [例3-3] 定義一個(gè)整型局部變量和一個(gè)可變長(zhǎng)字符型局部變量并賦值。 DEC
18、LARE @local_variable_int int,@local_variable_char nvarchar(9) SELECT @local_variable_int=40 SET @local_variable_char = Welcom to Nanjing SELECT @local_variable_int SELECT @local_variable_char GO,19,注意: 1) 如果被賦值的長(zhǎng)度超過(guò)DECLAER語(yǔ)句中聲明的長(zhǎng)度,將此值賦值給局部變量時(shí),超過(guò)的部分將被截去。如上例,局部變量 @local_variable_char定義的長(zhǎng)度為9,而給其賦的值是“We
19、lcom to Nanjing”,最后局部變量 @local_variable_char的值為“Welcom to”。 2) 也可以用SELECT語(yǔ)句從表中查詢(xún)出的結(jié)果給局部變量賦值,但要保證查詢(xún)出的值的惟一性,否則不能保證給局部變量賦值的準(zhǔn)確性。 3) 在定義局部變量時(shí)容易發(fā)生數(shù)據(jù)類(lèi)型不匹配的錯(cuò)誤。即:使用DECLARE語(yǔ)句定義的局部變量與賦給局部變量的值的數(shù)據(jù)類(lèi)型不匹配。如果發(fā)生這種情況,SQL Server總是試圖隱式地將被賦的值的數(shù)據(jù)類(lèi)型轉(zhuǎn)化為局部變量的數(shù)據(jù)類(lèi)型。,20,2. 全局變量 全局變量在整個(gè)SQL Server系統(tǒng)內(nèi)使用。存儲(chǔ)的通常是一些SQL Server的配置設(shè)定值和統(tǒng)計(jì)
20、數(shù)據(jù)。 在使用全局變量時(shí)應(yīng)該注意以下幾點(diǎn): 全局變量是在服務(wù)器級(jí)定義的。 SQL Server提供的全局變量分為兩類(lèi): 1) 與SQL Server 連接有關(guān)的全局變量。如:@@rowcount表示受最近一個(gè)語(yǔ)句影響的行數(shù)。 2) 關(guān)于系統(tǒng)內(nèi)部信息有關(guān)的全局變量。如:@@version表示SQL Server的版本號(hào)。 全局變量反映的是服務(wù)器當(dāng)前的狀態(tài),SQL Server 2000提供了30多個(gè)全局變量,下面介紹幾個(gè)常用的全局變量: @@connections:返回自上次啟動(dòng)SQL Server? 以來(lái)連接或試圖連接的次數(shù)。 @@rowcount:返回上一條T-SQL語(yǔ)句影響到的數(shù)據(jù)行數(shù)。,
21、21,@@error:返回上一條T-SQL語(yǔ)句執(zhí)行后的錯(cuò)誤號(hào)。 @@procid:返回當(dāng)前存儲(chǔ)過(guò)程的ID標(biāo)識(shí)。 @@remserver:返回登錄記錄中遠(yuǎn)程服務(wù)器的名字。 @@spid:返回當(dāng)前服務(wù)器進(jìn)程的ID標(biāo)識(shí)。 @@version:返回當(dāng)前SQLServer服務(wù)器的版本。 3. 局部變量與全局變量的顯示 使用SELECT語(yǔ)句可以顯示局部變量和全局變量。語(yǔ)句形式為: 顯示局部變量:SELECT @variable_name 顯示全局變量:SELECT @@variable_name,本章首頁(yè),22,3.4 運(yùn)算符,3.4.1 算術(shù)運(yùn)算符 算術(shù)運(yùn)算符包括加(+)、減(-)、乘(*)、除(/)
22、和取模(%)(select 10%4,4%10) 3.4.2 賦值運(yùn)算符 Transact-SQL中只有一個(gè)賦值運(yùn)算符,即等號(hào)(=) 3.4.3 位運(yùn)算符 位運(yùn)算符包括按位與(&)、按位或(|)、按位異或(^)和求反(~)。 位運(yùn)算符用來(lái)對(duì)整型數(shù)據(jù)或者二進(jìn)制數(shù)據(jù)(image數(shù)據(jù)類(lèi)型除外)之間執(zhí)行位操作。要求在位運(yùn)算符左右兩側(cè)的操作數(shù)不能同時(shí)是二進(jìn)制數(shù)據(jù)。 例 select 2,~2, 2^3,2|4,2&4(由同學(xué)自己去思考),23,3.4 運(yùn)算符,3.4.4 比較運(yùn)算符 比較運(yùn)算符包括:等于(=)、大于(>)、大于或等于(>=)、小于(或!=)、不小于(!)。 3.4.5 邏輯運(yùn)算符 邏輯運(yùn)
23、算符包括與(AND)、或(OR)和非(NOT)等運(yùn)算符。 關(guān)系運(yùn)算和邏輯運(yùn)算返回布爾值,值為T(mén)RUE或FALSE。這種值不能參于運(yùn)算及輸出. 例 select 5>3 (是錯(cuò)誤的,由同學(xué)去完成) 3.4.6 字符串連接運(yùn)算符 (+) 字符串運(yùn)算符加號(hào)(+)將兩個(gè)以上的字符串(不作任何處理、直接)相聯(lián)。 例如 北京2008 + + 奧運(yùn)會(huì) 連接后結(jié)果為 北京2008 奧運(yùn)會(huì),24,3.4.7 運(yùn)算符的優(yōu)先級(jí) () (括號(hào)) ~ (按位取反) 正、負(fù)、 乘、除、取模:*、/、%(取模) 加、連接符、減 比較符:=, >, =, NOT (非) AND (與) OR (或) = (賦值),本章
24、首頁(yè),3.4 運(yùn)算符,25,3.5 函數(shù),輸出函數(shù)值要用select 命令 3.5.1 數(shù)學(xué)函數(shù) P52 3.5.2 字符串函數(shù) P53 3.5.3 轉(zhuǎn)換函數(shù) P55 CAST ( expression AS data_type ) CONVERT (data_type[(length)], expression [,style]) 3.5.4 日期和時(shí)間函數(shù) P56 3.5.5 系統(tǒng)函數(shù) P58 3.5.6 集合函數(shù) P58 count()、avg()、max()、min(),本章首頁(yè),26,3.6 簡(jiǎn)單的SELECT 語(yǔ)句,select語(yǔ)句是數(shù)據(jù)SQL中最重要的語(yǔ)句,其功能強(qiáng)大,使用
25、靈活。 SELECT語(yǔ)句有豐富的子句,其最簡(jiǎn)單的用法是: select from where 列名表可以用 星號(hào)(*)、表達(dá)式、列表、變量等,其中 * 表示表中所有的列項(xiàng)。 例1 select au_lname,au_fname,phone,city ,state from authors 例2 select au_lname,au_fname,phone,city ,state from authors where state =‘CA’,本章首頁(yè),27,3.7 批處理和 流程控制語(yǔ)句,通常,服務(wù)器端的程序使用SQL語(yǔ)句來(lái)編寫(xiě),一般而言,一個(gè)服務(wù)器端的程序是由以下一些成分組成: 批; 注
26、釋?zhuān)?程序中使用的變量; 改變批中語(yǔ)句的執(zhí)行順序的控制語(yǔ)句; 錯(cuò)誤和消息的處理。 3.7.1 批和腳本 1.批(batch) 兩個(gè)GO之間的SQL語(yǔ)句作為一個(gè)批處理。在一個(gè)批處理中可以包含一條或多條Transact-SQL語(yǔ)句,成為一個(gè)語(yǔ)句組。這樣的語(yǔ)句組從應(yīng)用程序一次性地發(fā)送到SQL Server服務(wù)器進(jìn)行執(zhí)行。SQL Server服務(wù)器將批處理編譯成一個(gè)可執(zhí)行單元,稱(chēng)為執(zhí)行計(jì)劃。這樣處理可以節(jié)省系統(tǒng)開(kāi)銷(xiāo)。,28,使用批時(shí)有如下限制: 1) 并不是所有語(yǔ)句都可以和其他語(yǔ)句在一個(gè)組合成批。下列語(yǔ)句不能組合在同一個(gè)批中: create procedure create rule crea
27、te defaul create trigger create view 2)規(guī)則和缺省不能在同一個(gè)批中既綁定到列又被使用。 3)CHECK約束不能在同一個(gè)批中既定義又使用。 4)在同一個(gè)批中不能刪除對(duì)象又重新它。 5)用SET語(yǔ)句改變的選項(xiàng)在批結(jié)束時(shí)生效。 6)在同一個(gè)批中不能改變一個(gè)表再立即引用其新列。 另外當(dāng)一外含有多個(gè)批的SQL腳本提交執(zhí)行時(shí)發(fā)生錯(cuò)誤,SQL服務(wù)器顯示出的錯(cuò)誤行提示是錯(cuò)誤語(yǔ)句所在批中的行號(hào),而不是該語(yǔ)句在整個(gè)SQL腳本中的行號(hào)。 2. 腳本 腳本是一系列順序提交的批。,29,3.7.2 流程控制語(yǔ)句 流程控制語(yǔ)言是Transact - SQL對(duì)ANSI-92
28、 SQL標(biāo)準(zhǔn)的擴(kuò)充。它可以控制SQL語(yǔ)句執(zhí)行的順序,在存儲(chǔ)過(guò)程、觸發(fā)器和批中很有用。具體包括: IF. . . ELSE 條件執(zhí)行命令; CASE語(yǔ)句 多條件分支選擇語(yǔ)句; GOTO語(yǔ)句 無(wú)條件轉(zhuǎn)移語(yǔ)句; BEGIN . . . END 將一組SQL語(yǔ)句作為一個(gè)語(yǔ)句塊; WHILE 循環(huán)執(zhí)行相同的語(yǔ)句; RETURN 無(wú)條件返回; PRINT 在屏幕上顯示信息; RAISERROR 將錯(cuò)誤信息顯示在屏幕上,同時(shí)也可以記錄在NT日志中; WAITFOR 等待語(yǔ)句。,3.7.2 流程控制語(yǔ)句,30,1. RETURN RETURN的作用是無(wú)條件退出所在的批、存儲(chǔ)過(guò)程和觸發(fā)器。退出時(shí),可以返回狀態(tài)信
29、息。在RETURN語(yǔ)句后面的任何語(yǔ)句不被執(zhí)行。 RETURN語(yǔ)句的語(yǔ)法形式: RETURN [integer_expression] 其中,integer_expression 是一個(gè)表示過(guò)程返回的狀態(tài)值。系統(tǒng)保留0為成功。小于0為有錯(cuò)誤。,,31,2. RAISERROR和PRINT ⑴ PRINT語(yǔ)句 PRINT語(yǔ)句的作用是在屏幕上顯示用戶(hù)信息。PRINT語(yǔ)句的語(yǔ)法形式如下: PRINT {‘string’ | @local_variable |@@ local_variable } 其中,string代表一個(gè)不超過(guò)255字節(jié)的字符串。@local_variable 代表一個(gè)局部變量,該局
30、部變量必須是CHAR或VARCHAR類(lèi)型。@@ local_variable代表能被轉(zhuǎn)化為char或varchar 類(lèi)型的全局變量。 【例3-14】將 GETDATE 函數(shù)的結(jié)果轉(zhuǎn)換為 varchar 數(shù)據(jù)類(lèi)型,并將其與 PRINT 要返回的文本“本信息打印的時(shí)間是”。 PRINT 本信息打印的時(shí)間是 + RTRIM(CONVERT(varchar(30), GETDATE())) + .,32,⑵ RAISERROR語(yǔ)句 RAISERROR語(yǔ)句的作用是將錯(cuò)誤信息顯示在屏幕上,同時(shí)也可以記錄在NT日志中。RAISERROR 語(yǔ)句的語(yǔ)法形式: RAISERROR error_number {ms
31、g_id | msg_str},SEVERITY, STATE [ , argument1 [ , . . . n]] 其中: ? error_number:是指錯(cuò)誤號(hào)。 ? msg_id | msg_str:是指錯(cuò)誤信息。 ? SEVERITY:是指錯(cuò)誤的嚴(yán)重級(jí)別。 ? STATE:是指發(fā)生錯(cuò)誤時(shí)的狀態(tài)信息。,33,3. CASE 表達(dá)式 在Microsoft SQL Server 2005中CASE語(yǔ)句有三種形式:簡(jiǎn)單型CASE語(yǔ)句、搜索型CASE語(yǔ)句、CASE關(guān)系函數(shù)。本書(shū)只介紹簡(jiǎn)單型CASE語(yǔ)句和搜索型CASE語(yǔ)句。 (1)簡(jiǎn)單型CASE語(yǔ)句 簡(jiǎn)單型CASE語(yǔ)句的語(yǔ)法形式: CASE
32、expression {WHEN expression THEN result} [,...n] [ELSE result ] END 其中: ? expression :可以是常量、列名、函數(shù)、算術(shù)運(yùn)算符等。 簡(jiǎn)單型CASE語(yǔ)句是根據(jù)表達(dá)式expression 的值與WHEN后面的表達(dá)式逐一比較,,如果兩者相等,返回THEN后面的表達(dá)式result的值,否則返回ELSE后面表達(dá)式result的值。,34,【例3-15】將PUBS庫(kù)中表titles里的 pub_id號(hào)為“0736”和“1839”記錄顯示出來(lái),其余的用“OTHER”顯示。 use pubs go select title,pub
33、_id= case pub_id when ‘0736’ then 0736 when ‘1389’ then 1389 else OTHER end from titles,35,(2)搜索型CASE語(yǔ)句 搜索型CASE語(yǔ)句的語(yǔ)法形式: CASE WHEN Boolean_expression THEN result} [,...n] [ELSE result ] END 其中: ? Boolean_expression :CASE語(yǔ)句要判斷的邏輯表達(dá)式。 搜索型CASE語(yǔ)句是判斷邏輯表達(dá)式Boolean_expression為真,則返回THEN后面表達(dá)式result的值,然后判斷下一
34、個(gè)邏輯表達(dá)式,如果所有邏輯表達(dá)式都為假,則返回ELSE后面表達(dá)式result的值。,36,【例3-16】將PUBS庫(kù)中表titles里的price大于10的記錄對(duì)應(yīng)的price_level顯示“HIGH”,price小于10的記錄對(duì)應(yīng)的price_level顯示“LOW”,其余的顯示“EQ10”。 use pubs go select title,price level= case when price > 10 then HIGH when price < 10 then LOW else EQ10 end from titles,37,4. BEGIN. . . END 當(dāng)需要將一個(gè)
35、以上的SQL語(yǔ)句作為一組對(duì)待時(shí),可以使用BEGIN和END將它們括起來(lái)形成一個(gè)SQL語(yǔ)句塊,以達(dá)到一起執(zhí)行的目的。 BEGIN. . . END語(yǔ)句的語(yǔ)法形式: BEGIN Sql_statement END ? Sql_statement:是要執(zhí)行的任何合法的SQL語(yǔ)句或語(yǔ)句組,需要用戶(hù)加以注意的是它必須包含在一個(gè)單獨(dú)的批中。,38,5. IF. . . ELSE IF. . . ELSE語(yǔ)句的語(yǔ)法形式: IF Boolean_expression Sql_statement [ELSE [IF Boolean_expression] Sql_statement ] 其中: ? Boo
36、lean_ expression:是布爾表達(dá)式,其值是TRUE或FALSE。 ? Sql_statement:是要執(zhí)行的SQL語(yǔ)句。這既可以是單個(gè)SQL語(yǔ)句,也可以是一組SQL語(yǔ)句。如果在IF或ELSE語(yǔ)句后面有多條SQL語(yǔ)句,必須把它們放在BEGIN . . . END塊中。,39,【例3-17】定義一個(gè)整形變量,如賦值為1,顯示“I am a student”,否則顯示“I am a teacher”。 declare @a int select @a=2 if @a=1 begin print I am print a student end else print I am a
37、teacher go,40,6. WHILE 結(jié)構(gòu) WHILE語(yǔ)句的作用是為重復(fù)執(zhí)行某一語(yǔ)句或語(yǔ)句塊設(shè)置條件。當(dāng)指定條件為T(mén)RUE時(shí),執(zhí)行這些語(yǔ)句,直到為FALSE為止。 WHILE語(yǔ)句的語(yǔ)法形式: WHILE boolean- expression Sql_statement [BREAK ] { Sql_statement } [CONTINUE ] { Sql_statement },41,其中: ? boolean- expression:是布爾表達(dá)式,其值是TRUE或FALSE。 ? Sql_statement:是要執(zhí)行的SQL語(yǔ)句。既可以是單個(gè)SQL語(yǔ)句,也可以是一組SQL語(yǔ)
38、句。如果在WHILE語(yǔ)句后面有多條SQL語(yǔ)句,必須把它們放在BEGIN . . . END塊中。 ? BREAK:是退出所在的循環(huán)。 ? CONTINUE:是使循環(huán)跳過(guò)CONTINUE之后的語(yǔ)句重新開(kāi)始。,42,【例3-18】輸出字符串“School” 中每一個(gè)字符的ASCII值和字符。 declare @position int,@string char(6) set @position =1 set @string =School while @position<=datalength(@string) begin select ascii(substring( @string,@posi
39、tion,1)) as asccode, char(ascii(substring( @string,@position,1))) as ascchar set @position= @position+1 end,43,7. GOTO語(yǔ)句 使用GOTO語(yǔ)句可以使SQL語(yǔ)句的執(zhí)行流程無(wú)條件地轉(zhuǎn)移到指定的標(biāo)號(hào)位置。GOTO語(yǔ)句和標(biāo)號(hào)可以用在語(yǔ)句塊、批處理和存儲(chǔ)過(guò)程中,標(biāo)號(hào)的命名要符合標(biāo)識(shí)符命名規(guī)則。GOTO語(yǔ)句經(jīng)常用在WHILE和IF語(yǔ)句中以跳出循環(huán)或分支處理。 GO語(yǔ)句的語(yǔ)法形式: Label: …… GOTO label,44,【例3-19】使用IF語(yǔ)句求1到10之間的累加和并輸出結(jié)果 d
40、eclare @sum int,@count int select @sum=0,@count=1 label: select @sum=@sum+@count select @count=@count+ 1 if @count<=10 goto label select @sum,@count,45,8. WAITFOR語(yǔ)句 使用WAITFOR語(yǔ)句可以在某一個(gè)時(shí)刻或某一個(gè)時(shí)間間隔后執(zhí)行SQL語(yǔ)句或語(yǔ)句組。 WAITFOR語(yǔ)句語(yǔ)法形式: WAITFOR {DELAY ‘time’|TIME ‘time’} 其中: DELAY 指定時(shí)間間隔,TIME指定在某一個(gè)時(shí)刻。TIME參數(shù)的數(shù)據(jù)類(lèi)型為datetime,格式為‘hh:mm:ss’。,46,【例3-20】設(shè)置在9:00進(jìn)行一次查詢(xún)操作。 use pubs go begin waitfor time 9:00 select * from titles end,47,【例3-21】設(shè)置在5分鐘后進(jìn)行一次查詢(xún)操作。 use pubs go begin waitfor delay 00:05 select * from titles end,48,9.注釋語(yǔ)句 注釋語(yǔ)句是起說(shuō)明代碼含義,增加腳本的可讀性,是不執(zhí)行的,有兩種用法: (1)/*……*/ 該方法可以注釋多行。 (2)- -(兩個(gè)減號(hào)) 用于一行的注釋。,本章首頁(yè),
- 溫馨提示:
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. 裝配圖網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- (賽課課件)人教部編版四年級(jí)上冊(cè)語(yǔ)文-《盤(pán)古開(kāi)天地》課件
- (課標(biāo)通用)北京市2020版高考數(shù)學(xué)大一輪復(fù)習(xí)-第二章-2-第二節(jié)-函數(shù)的單調(diào)性與最值課件
- 高考語(yǔ)文一輪復(fù)習(xí)《古代詩(shī)歌鑒賞》課件
- 湘美版二年級(jí)下冊(cè)美術(shù)-《8彩點(diǎn)點(diǎn)-》-課件
- 湘教版數(shù)學(xué)七年級(jí)下冊(cè)第6章數(shù)據(jù)的分析復(fù)習(xí)課件
- M7U1外研社一起始第11冊(cè)自制課件(教育精品)
- lesson30課件(教育精品)
- 期貨白糖質(zhì)量標(biāo)準(zhǔn)與現(xiàn)行標(biāo)準(zhǔn)的區(qū)別
- 釣魚(yú)的啟示 (2)(精品)
- 紅色春節(jié)節(jié)日英語(yǔ)課件模板
- 紅色微粒體清新年終述職報(bào)告課件模板
- 紅旗飄飄校園教育通用課件
- 秋七年級(jí)語(yǔ)文上冊(cè) 第一單元 第2課 秋天的懷念課件 (新版)新人教版
- 最新數(shù)學(xué)中考《反比例函數(shù)》專(zhuān)題復(fù)習(xí)精講精練課件
- 2019年秋七年級(jí)數(shù)學(xué)上冊(cè)-小專(zhuān)題(十一)角的計(jì)算習(xí)題課件-(新版)新人教版