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