項(xiàng)目8 CJGL系統(tǒng)編程_第1頁
項(xiàng)目8 CJGL系統(tǒng)編程_第2頁
項(xiàng)目8 CJGL系統(tǒng)編程_第3頁
項(xiàng)目8 CJGL系統(tǒng)編程_第4頁
項(xiàng)目8 CJGL系統(tǒng)編程_第5頁
已閱讀5頁,還剩100頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

項(xiàng)目8CJGL系統(tǒng)編程

SQLServer2008項(xiàng)目實(shí)訓(xùn)教程技能目標(biāo)

學(xué)會使用Transact-SQL語言對CJGL數(shù)據(jù)庫進(jìn)行應(yīng)用編程,以提高數(shù)據(jù)庫應(yīng)用系統(tǒng)的開發(fā)能力

SQLServer2008項(xiàng)目實(shí)訓(xùn)教程知識目標(biāo)正確理解和掌握使用SQLServer變量;掌握SQLServer函數(shù)的使用;掌握流程控制語句;掌握編寫順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)的程序?qū)W會創(chuàng)建、刪除、修改存儲過程;學(xué)會根據(jù)實(shí)際需要設(shè)計(jì)CJGL數(shù)據(jù)庫中的存儲過程;掌握創(chuàng)建、執(zhí)行、修改和刪除觸發(fā)器的方法;學(xué)會根據(jù)實(shí)際開發(fā)CJGL數(shù)據(jù)庫中的觸發(fā)器;熟悉游標(biāo)的工作原理、定義和使用

SQLServer2008項(xiàng)目實(shí)訓(xùn)教程Transact-SQL語言T-SQL是Microsoft公司在關(guān)系型數(shù)據(jù)庫管理系統(tǒng)SQLServer中的SQL-3標(biāo)準(zhǔn)的實(shí)現(xiàn),是微軟對SQL(結(jié)構(gòu)化查詢語言)的擴(kuò)展,具有SQL的主要特點(diǎn),同時增加了變量,運(yùn)算符,函數(shù),流程控制和注釋等語言元素,使得其功能更加強(qiáng)大。T-SQL對SQLServer十分重要,SQLServer中使用圖形界面能夠完成的所有功能,都可以利用T-SQL來實(shí)現(xiàn).

SQLServer2008項(xiàng)目實(shí)訓(xùn)教程Transact-SQL語言的分類(1)數(shù)據(jù)定義語言DDL:用來創(chuàng)建數(shù)據(jù)庫和數(shù)據(jù)庫對象的命令,絕大部分以CREATE開頭,如CREATETABLE等。(2)數(shù)據(jù)操作語言DML:用來操作數(shù)據(jù)庫中各種對象,對數(shù)據(jù)進(jìn)行修改和檢索。DML語言主要有四種:SELECT(查詢)、INSERT(插入)、UPDATE(更新)和DELETE(刪除)。(3)數(shù)據(jù)控制語言DCL:用來控制數(shù)據(jù)庫組件的存取許可、權(quán)限等命令,如GRANT、REVOKE等。(4)事務(wù)管理語言TML:用于管理數(shù)據(jù)庫中的事務(wù)的命令,如COMMIT、ROLLBACK等。(5)其他語言元素:如標(biāo)識符、數(shù)據(jù)類型、流程控制和函數(shù)等。

SQLServer2008項(xiàng)目實(shí)訓(xùn)教程Transact-SQL語法約定Transact-SQL語法格式約定標(biāo)識符續(xù)行注釋批處理

SQLServer2008項(xiàng)目實(shí)訓(xùn)教程Transact-SQL語法格式約定語法約定說明大寫Transact-SQL關(guān)鍵字。

斜體用戶提供的Transact-SQL語法的參數(shù)。粗體數(shù)據(jù)庫名、表名、列名、索引名、存儲過程、實(shí)用工具、數(shù)據(jù)類型名以及必須按所顯示的原樣鍵入的文本。下劃線當(dāng)語句中省略了包含帶下劃線的值的子句時應(yīng)用的默認(rèn)值。|(豎線)分隔括號或大括號中的語法項(xiàng)。只能選擇其中一項(xiàng)。[](方括號)可選語法項(xiàng)。不要鍵入方括號。{}(大括號)必選語法項(xiàng)。不要鍵入大括號。[,...n]指示前面的項(xiàng)可以重復(fù)n次。每一項(xiàng)由逗號分隔。[...n]指示前面的項(xiàng)可以重復(fù)n次。每一項(xiàng)由空格分隔。[;]可選的

Transact-SQL語句終止符。不要鍵入方括號。<標(biāo)簽>::=語法塊的名稱。此約定用于對可在語句中的多個位置使用的過長語法段或語法單元進(jìn)行分組和標(biāo)記。

SQLServer2008項(xiàng)目實(shí)訓(xùn)教程語法格式約定標(biāo)識符:用來定義服務(wù)器、數(shù)據(jù)庫、數(shù)據(jù)庫對象和變量等的名稱??煞譃槌R?guī)標(biāo)識符和分隔標(biāo)識符。要求:第一個字符必須是字母、下劃線、at符號(@)和數(shù)字標(biāo)記(#);標(biāo)識符不能是T-SQL的保留字;包含的字符數(shù)必須在1-128之間。

續(xù)行:直接將一條語句分幾行編寫。

SQLServer2008項(xiàng)目實(shí)訓(xùn)教程語法格式約定注釋:使用--(雙減號)或/*…*/兩種表示方法例1:單行文本注釋--選擇學(xué)生信息Select*fromstudent例2:塊注釋語句Selectsno,sNameFromstudent/*wheresnoin(selectsnofromscore)*/其中,where子句被注釋,不再起作用。

SQLServer2008項(xiàng)目實(shí)訓(xùn)教程語法格式約定批處理:由一條或多條SQL語句構(gòu)成,可從批中讀取所有語句,編譯成可執(zhí)行的單元(執(zhí)行計(jì)劃),然后一次執(zhí)行計(jì)劃中的所有語句,用GO結(jié)束批處理。例:打印教師姓名Declare@namevarchar(10)Select@name=‘范新剛’Print‘教師姓名:’+@nameGo

SQLServer2008項(xiàng)目實(shí)訓(xùn)教程數(shù)據(jù)庫對象命名方法

所有數(shù)據(jù)庫對象名可以是由四部分組成的名稱,格式如下。[server_name.[database_name].[schema_name].

|database_name.[schema_name].|schema_name.]object_name

各部分說明如下。server_name:連接的服務(wù)器名稱或遠(yuǎn)程服務(wù)器名稱。database_name:SQLServer數(shù)據(jù)庫的名稱schema_name:指定包含對象的架構(gòu)的名稱。object_name:對象的名稱。

SQLServer2008項(xiàng)目實(shí)訓(xùn)教程常量

根據(jù)常量值的不同類型,常量分為字符串常量、二進(jìn)制常量、整型常量、實(shí)數(shù)常量、日期時間常量、貨幣常量和惟一標(biāo)識常量。

SQLServer2008項(xiàng)目實(shí)訓(xùn)教程變量

變量是指在程序運(yùn)行過程中,其值會改變的量。主要用來存儲臨時性的數(shù)據(jù)。

SQLServer2005提供兩種變量:用戶自己定義的局部變量和系統(tǒng)提供的全局變量。

SQLServer2008項(xiàng)目實(shí)訓(xùn)教程局部變量

用戶自己定義的變量稱為局部變量。局部變量用于保存特定類型的單個數(shù)據(jù)值的對象,必須先定義,再使用。變量名必須以@開頭。定義格式:

DECLARE局部變量名數(shù)據(jù)類型[,...n]【例】定義一個整型變量。Declare@numberint【例】定義三個varchar類型變量和一個整型變量Declare@namevarchar(8),@sexvarchar(2),@ageint,@addressvarchar(50)局部變量的賦值一次為一個變量賦值:SET@局部變量名=表達(dá)式[,…n]一次為多個變量賦值:SELECT@局部變量名=表達(dá)式[,…n][FROM子句][WHERE子句]

SQLServer2008項(xiàng)目實(shí)訓(xùn)教程局部變量子任務(wù)1:聲明2個變量,分別為字符型和整型,為其賦值為學(xué)生表中學(xué)號為001的學(xué)生姓名和年齡,并以消息方式輸出以下結(jié)果:Declare@namevarchar(20),@ageintSelect@name=姓名,@age=datediff(yy,出生日期,getdate())From學(xué)生表Where學(xué)號='001'Print@name+’的年齡是:’+cast(@ageasvarchar(10))

SQLServer2008項(xiàng)目實(shí)訓(xùn)教程全局變量

全局變量由系統(tǒng)定義和維護(hù)的變量,用于記錄服務(wù)器活動狀態(tài)的一組數(shù)據(jù)。全局變量名由@@符號開始。用戶不能建立全局變量,也不能使用SET語句去修改全局變量的值。在SQLServer中,全局變量以系統(tǒng)函數(shù)的形式在使用。

SQLServer2008項(xiàng)目實(shí)訓(xùn)教程表達(dá)式和運(yùn)算符

表達(dá)式是標(biāo)識符、值和運(yùn)算符的組合??蓪⒈磉_(dá)式用在查詢中作為檢索數(shù)據(jù)的一部分,也可用作查找滿足一組條件的數(shù)據(jù)時的搜索條件。

SQLServer2008項(xiàng)目實(shí)訓(xùn)教程算術(shù)運(yùn)算符運(yùn)算符含義+(加)加-(減)減*(乘)乘/(除)除%(取模)返回一個除法運(yùn)算的整數(shù)余數(shù)。例如,12%5=2,這是因?yàn)?2除以5,余數(shù)為2。

SQLServer2008項(xiàng)目實(shí)訓(xùn)教程位運(yùn)算符運(yùn)算符含義&(位與)邏輯與運(yùn)算(兩個操作數(shù))|(位或)位或(兩個操作數(shù))^(位異或)位異或(兩個操作數(shù))

SQLServer2008項(xiàng)目實(shí)訓(xùn)教程比較運(yùn)算符運(yùn)算符含義=(等于)等于>(大于)大于<(小于)小于>=(大于等于)大于或等于<=(小于等于)小于或等于<>(不等于)不等于!=(不等于)不等于(非SQL-92標(biāo)準(zhǔn))!<(不小于)不小于(非SQL-92標(biāo)準(zhǔn))!>(不大于)不大于(非SQL-92標(biāo)準(zhǔn))

SQLServer2008項(xiàng)目實(shí)訓(xùn)教程邏輯運(yùn)算符運(yùn)算符含義ALL如果一組的比較都為TRUE,那么就為TRUE。AND如果兩個布爾表達(dá)式都為TRUE,那么就為TRUE。ANY如果一組的比較中任何一個為TRUE,那么就為TRUE。BETWEEN如果操作數(shù)在某個范圍之內(nèi),那么就為TRUE。EXISTS如果子查詢包含一些行,那么就為TRUE。IN如果操作數(shù)等于表達(dá)式列表中的一個,那么就為TRUE。LIKE如果操作數(shù)與一種模式相匹配,那么就為TRUE。NOT對任何其他布爾運(yùn)算符的值取反。OR如果兩個布爾表達(dá)式中的一個為TRUE,那么就為TRUE。SOME如果在一組比較中,有些為TRUE,那么就為TRUE。

SQLServer2008項(xiàng)目實(shí)訓(xùn)教程字符串串聯(lián)運(yùn)算符

加號(+)是字符串串聯(lián)運(yùn)算符,將字符串串聯(lián)起來。例如,‘教師姓名:’+‘范新剛'的結(jié)果就是'教師姓名:范新剛'。

SQLServer2008項(xiàng)目實(shí)訓(xùn)教程一元運(yùn)算符運(yùn)算符含義+(正)數(shù)值為正。-(負(fù))數(shù)值為負(fù)。~(位非)返回?cái)?shù)字的非。

SQLServer2008項(xiàng)目實(shí)訓(xùn)教程運(yùn)算符優(yōu)先級級別運(yùn)算符1~(位非)2*(乘)、/(除)、%(取模)3+(正)、-(負(fù))、+(加)、(+連接)、-(減)、&(位與)4=,

>、<、>=、<=、<>、!=、!>、!<(比較運(yùn)算符)5^(位異或)、|(位或)6NOT7AND8ALL、ANY、BETWEEN、IN、LIKE、OR、SOME9=(賦值)

SQLServer2008項(xiàng)目實(shí)訓(xùn)教程函數(shù)

在Transact-SQL編程語言中提供豐富的函數(shù)。函數(shù)可分系統(tǒng)定義函數(shù)和用戶定義函數(shù)。本節(jié)介紹的是系統(tǒng)定義函數(shù)中最常用的數(shù)學(xué)函數(shù)、字符串函數(shù)、日期時間函數(shù)、聚合函數(shù)、類型轉(zhuǎn)換函數(shù)的最常用的部分。

SQLServer2008項(xiàng)目實(shí)訓(xùn)教程聚合函數(shù)常用的聚合函數(shù)(只用在select、compute、computeby或having子句中)

函數(shù)名功能AVG返回一組值的平均值。COUNT返回一組值中項(xiàng)目的數(shù)量。(返回值為int類型)。COUNT_BIG返回一組值中項(xiàng)目的數(shù)量。(返回值為bigint類型)。MAX返回表達(dá)式或者項(xiàng)目中的最大值。MIN返回表達(dá)式或者項(xiàng)目中的最小值。SUM返回表達(dá)式中所有項(xiàng)的和,或者只返回DISTINCT值。SUM只能用于數(shù)字列。

SQLServer2008項(xiàng)目實(shí)訓(xùn)教程數(shù)學(xué)函數(shù)

函數(shù)名功能ABS()返回該數(shù)的絕對值。Pi()返回圓周率。POWER(N,M)返回N的M次冪。RAND([N])返回0~1之間的隨機(jī)數(shù)。ROUND(X,N)返回四舍五入值,精度為保留小數(shù)點(diǎn)N位。SQRT()返回平方根。

SQLServer2008項(xiàng)目實(shí)訓(xùn)教程字符串函數(shù)函數(shù)功能ASCII(字符表達(dá)式)返回最左側(cè)的字符的ASCII碼值CHAR(整型表達(dá)式)將intASCII代碼轉(zhuǎn)換為字符LEFT(字符表達(dá)式,整數(shù))返回從左邊開始指定個數(shù)的字符串RIGHT(字符表達(dá)式,整數(shù))截取從右邊開始指定個數(shù)字符串SUBSTRING(字符表達(dá)式,起始點(diǎn),n)截取從起始點(diǎn)開始n個字符串LEN(字符串表達(dá)式)返回字符串的長度LTRIM(字符表達(dá)式)剪去左空格RTRIM(字符表達(dá)式)剪去右空格REPLICATE(字符表達(dá)式,n)重復(fù)字串CHARINDEX(字符C,字符表達(dá)式,[P])返回指定字符C在字符串中第一次出現(xiàn)的位置LOWER(字符常量)/UPPER(字符常量)/返回字符的小寫/大寫

SQLServer2008項(xiàng)目實(shí)訓(xùn)教程日期和時間函數(shù)函數(shù)功能DATEADD(datepart,數(shù)值,日期)返回增加一個時間間隔后的日期結(jié)果DATEDIFF(datepart,日期1,日期2)返回兩個日期之間的時間間隔,格式為datepart參數(shù)指定的格式DATENAME(datepart,日期)返回日期的文本表示,格式為datepart指定格式DATEPART(datepart,日期)返回某日期的datepart代表的整數(shù)值GETDATE()返回當(dāng)前系統(tǒng)日期和時間DAY(日期)返回某日期的日datepart所代表的整數(shù)值MONTH(日期)返回某日期的月datepart所代表的整數(shù)值YEAR(日期)返回某日期的年datepart所代表的整數(shù)值

SQLServer2008項(xiàng)目實(shí)訓(xùn)教程類型轉(zhuǎn)換函數(shù)函數(shù)功能CAST(@varASDatatype)將變量或常量數(shù)據(jù)類型轉(zhuǎn)換為指定類型。CONVERT(Datatype,@var,[日期格式])將變量或常量數(shù)據(jù)類型轉(zhuǎn)換為指定類型。如轉(zhuǎn)換為日期類型,可指定日期格式。

SQLServer2008項(xiàng)目實(shí)訓(xùn)教程輸出顯示1.以網(wǎng)格方式輸出使用select語句輸出,如select@var1,@var2……2.以消息方式輸出使用print語句輸出,如print@var1+@var2+……注意:使用print輸出的只能是字符類型,如其中包含非字符類型數(shù)據(jù),則要進(jìn)行類型轉(zhuǎn)換。

SQLServer2008項(xiàng)目實(shí)訓(xùn)教程任務(wù)實(shí)施子任務(wù)2:一個電子郵箱地址為student_www@126.com,請使用函數(shù)得到其賬戶名,并以消息方式輸出。Declare@emailvarchar(30),@usernamevarchar(20)Set@email='student_www@126.com'Set@username=substring(@email,1,charindex('@',@email)-1)Print@username子任務(wù)3:聲明一個字符變量,并為其賦值(任意單詞),然后將首字符變?yōu)榇髮懞筝敵觥eclare@wordvarchar(10),@new_wordvarchar(10)Set@word='student'Set@new_word=upper(left(@word,1))set@new_word=@new_word+right(@word,len(@word)-1)Print@new_word

SQLServer2008項(xiàng)目實(shí)訓(xùn)教程任務(wù)實(shí)施子任務(wù)4:查詢80年代出生的學(xué)生信息,包括姓名、性別和出生日期。Select姓名,性別,出生日期From學(xué)生表Whereconvert(char(4),year(出生日期),102)like'198[0-9]‘其中,102表示日期采用ANSI標(biāo)準(zhǔn)的yy.mm.dd格式。

SQLServer2008項(xiàng)目實(shí)訓(xùn)教程流程控制語句1、BEGIN…END語句

BEGIN…END語句用于將多個Transact-SQL語句組合為一個邏輯塊,相當(dāng)于一個單一語句,達(dá)到一起執(zhí)行的目的。它的語法格式如下。

BEGIN{

語句1

語句2…}ENDSQLServer允許BEGIN…END語句嵌套使用。

SQLServer2008項(xiàng)目實(shí)訓(xùn)教程流程控制語句(續(xù))2、IF…ELSE語句

IF…ELSE語句實(shí)現(xiàn)程序選擇結(jié)構(gòu)。它的語法格式如下。

IF邏輯表達(dá)式

{語句塊1}[ELSE{語句塊2}]

SQLServer2008項(xiàng)目實(shí)訓(xùn)教程流程控制語句(續(xù))【例】在CJGL數(shù)據(jù)庫中,查詢學(xué)生的平均成績是否超過60分,并顯示相關(guān)信息。

declare@avg_sintselect@avg_s=avg(成績)from成績表

if@avg_s>60print'學(xué)生的平均成績超過60分'elseprint'學(xué)生的平均成績不超過60分‘

SQLServer2008項(xiàng)目實(shí)訓(xùn)教程流程控制語句(續(xù))【例】在CJGL數(shù)據(jù)庫中,查詢課程編號為“X001”的平均分是否超過80,如果是,列出所有該課程分?jǐn)?shù)超過平均分的學(xué)生信息:學(xué)號、姓名、成績;否則列出所有該課程分?jǐn)?shù)低于平均分的學(xué)生信息。declare@avg_sfloatselect@avg_s=avg(成績)from成績表where課程編號=‘X001’if@avg_s>80selectS1.學(xué)號,姓名,成績from學(xué)生表S1,成績表S2whereS1.學(xué)號=S2.學(xué)號and成績>@avg_sand課程編號=‘X001’elseselects1.學(xué)號,姓名,成績from學(xué)生表S1,成績表S2whereS1.學(xué)號=S2.學(xué)號and成績<=@avg_sand課程編號=‘X001’

SQLServer2008項(xiàng)目實(shí)訓(xùn)教程流程控制語句(續(xù))3、CASE語句:多分支結(jié)構(gòu)。格式有如下兩種:(1)簡單case表達(dá)式計(jì)算條件列表并返回多個可能結(jié)果表達(dá)式之一。Case輸入表達(dá)式

when表達(dá)式1then結(jié)果表達(dá)式1when表達(dá)式2then結(jié)果表達(dá)式2[,…n][else其它結(jié)果表達(dá)式]end

SQLServer2008項(xiàng)目實(shí)訓(xùn)教程流程控制語句(續(xù))【例】查詢所有學(xué)生的姓名、性別、出生日期和所在班級信息。select姓名,性別,出生日期,班級名稱=case班級編號when0900401001then'11網(wǎng)絡(luò)技術(shù)'when0900402002then'11軟件技術(shù)'when0900403003then’12軟件技術(shù)‘else'其它班級'endfrom學(xué)生表

SQLServer2008項(xiàng)目實(shí)訓(xùn)教程流程控制語句(續(xù))

(2)搜索類型case表達(dá)式

Casewhen邏輯表達(dá)式1then結(jié)果表達(dá)式1when邏輯表達(dá)式2then結(jié)果表達(dá)式2[,…n][else其它結(jié)果表達(dá)式]End

SQLServer2008項(xiàng)目實(shí)訓(xùn)教程流程控制語句(續(xù))【例】教師信息,并增加一列“等級”:如果職稱為“教授”、“副教授”和“高級工程師”則等級為“高級”,如果職稱為“講師”和“工程師”的則等級為“中級”,其它為“初級”。select教師編號,教師姓名,出生日期,等級=casewhen職稱in('教授','副教授','高級工程師')then'高級'when職稱in('講師','工程師')then'中級'else'初級'endfrom教師表

SQLServer2008項(xiàng)目實(shí)訓(xùn)教程流程控制語句(續(xù))4、WHILE語句

WHILE語句實(shí)現(xiàn)循環(huán)結(jié)構(gòu)。如果指定的條件為真,就重復(fù)執(zhí)行語句塊,直到邏輯表達(dá)式為假。它的語法格式如下。WHILE邏輯表達(dá)式

BEGIN

語句塊1[CONTINUE][BREAK]

語句塊2END

SQLServer2008項(xiàng)目實(shí)訓(xùn)教程流程控制語句(續(xù))【例】編寫程序,求1-100之間的和。declare@iint,@sumbigintselect@i=1,@sum=0while@i<=100beginset@sum=@sum+@iset@i=@i+1endprint@sum【例】編寫程序,求1-200之間所有能被7整除的整數(shù)。declare@iintset@i=1while@i<=200beginif@i%7=0print@iSet@i=@i+1end

SQLServer2008項(xiàng)目實(shí)訓(xùn)教程流程控制語句(續(xù))5、RETURN語句:無條件退出。格式如下:RETURN[整數(shù)表達(dá)式]6、WAITFOR語句

WAITFOR語句實(shí)現(xiàn)語句延緩一段時間或延遲到某特定的時間執(zhí)行。它的語法格式如下。WAITFOR{DELAY'time'|TIME'time'}其中,Delay表示一直等到指定的時間過去,最長24小時。

Time則表示等待到指定時間?!纠康却?0秒后執(zhí)行select語句。

Waitfordelay'00:00:10’Select*from學(xué)生表【例】等到11點(diǎn)10分后才執(zhí)行select語句。

Waitfortime’11:10:00’Select*from學(xué)生表

SQLServer2008項(xiàng)目實(shí)訓(xùn)教程用戶自定義函數(shù)函數(shù)是由一個或多個T-SQL語句組成的子程序,可用于封裝代碼以便重新使用。SQLserver中除了可以使用系統(tǒng)函數(shù)外,還允許用戶創(chuàng)建自己的函數(shù)。T-SQL中用戶自定義函數(shù)分為3類:標(biāo)量函數(shù)、內(nèi)嵌表值函數(shù)和多語句表值函數(shù)。

SQLServer2008項(xiàng)目實(shí)訓(xùn)教程用戶自定義函數(shù)1.標(biāo)量函數(shù)返回一個標(biāo)量值。語法格式如下:Createfunction函數(shù)名([參數(shù)名1數(shù)據(jù)類型,…])returns數(shù)據(jù)類型–定義函數(shù)返回的數(shù)據(jù)類型[withencryption]asbeginSQL_statementreturn表達(dá)式語句–標(biāo)量函數(shù)必須具有返回值end

SQLServer2008項(xiàng)目實(shí)訓(xùn)教程用戶自定義函數(shù)【例】創(chuàng)建標(biāo)量函數(shù)UF_Credits,該函數(shù)根據(jù)輸入的學(xué)號,返回該學(xué)生取得的總學(xué)分?jǐn)?shù),并利用該函數(shù)查詢“11網(wǎng)絡(luò)技術(shù)”班所有學(xué)生的學(xué)號、姓名、總學(xué)分?jǐn)?shù)。--首先創(chuàng)建函數(shù)createfunctionUF_Credits(@snovarchar(10))returnsintasbegindeclare@creditintselect@credit=sum(學(xué)分)from成績表Sjoin課程表ConS.課程編號=C.課程編號where成績>=60and學(xué)號=@snoreturn@creditend

SQLServer2008項(xiàng)目實(shí)訓(xùn)教程用戶自定義函數(shù)【例】創(chuàng)建標(biāo)量函數(shù)UF_Credits,該函數(shù)根據(jù)輸入的學(xué)號,返回該學(xué)生取得的總學(xué)分?jǐn)?shù),并利用該函數(shù)查詢“11網(wǎng)絡(luò)技術(shù)”班所有學(xué)生的學(xué)號、姓名、總學(xué)分?jǐn)?shù)。--應(yīng)用函數(shù)select學(xué)號,姓名,dbo.UF_Credits(學(xué)號)總學(xué)分?jǐn)?shù)from學(xué)生表Sjoin班級表ConS.班級編號=C.班級編號where班級名稱='11網(wǎng)絡(luò)技術(shù)'

SQLServer2008項(xiàng)目實(shí)訓(xùn)教程用戶自定義函數(shù)2.內(nèi)嵌表值函數(shù)函數(shù)體本身是一個查詢語句,結(jié)果返回一個表。語法格式如下:Createfunction函數(shù)名[(參數(shù)名1數(shù)據(jù)類型,…)]returnstable–返回的數(shù)據(jù)類型是表asreturnselect語句

SQLServer2008項(xiàng)目實(shí)訓(xùn)教程用戶自定義函數(shù)【例】創(chuàng)建內(nèi)嵌表值函數(shù)UF_Classlist,該函數(shù)根據(jù)輸入的班級名稱,給出該班所有學(xué)生的詳細(xì)信息,并利用該函數(shù)查詢“11網(wǎng)絡(luò)技術(shù)”班所有學(xué)生信息。--首先創(chuàng)建函數(shù)createfunctionUF_Classlist(@classnamevarchar(20))returnstableasreturnselectS.*from學(xué)生表Sjoin班級表ConS.班級編號=C.班級編號where班級名稱=@classname--應(yīng)用函數(shù)select*fromdbo.UF_Classlist('11網(wǎng)絡(luò)技術(shù)')

SQLServer2008項(xiàng)目實(shí)訓(xùn)教程用戶自定義函數(shù)1.多語句表值函數(shù)返回的也是一個表,但此表是在該函數(shù)中新定義的。語法格式如下:Createfunction函數(shù)名[(參數(shù)名1數(shù)據(jù)類型,…)]returns@table_nametable–返回的數(shù)據(jù)類型是表變量{table_define_statement}–定義表結(jié)構(gòu)asbeginSQL_statement–一般是select…into…語句return–后面不需要任何表達(dá)式end

SQLServer2008項(xiàng)目實(shí)訓(xùn)教程用戶自定義函數(shù)【例】創(chuàng)建多語句表值函數(shù)UF_Class_score,根據(jù)輸入的班級名稱和課程名稱返回該班所有學(xué)生的學(xué)號、姓名、性別、課程名稱和成績,并利用該函數(shù)查詢“11網(wǎng)絡(luò)技術(shù)”班“數(shù)據(jù)庫技術(shù)與應(yīng)用”課程的成績。--首先創(chuàng)建函數(shù)createfunctionUF_Class_score(@classnamevarchar(20),@coursenamevarchar(20))returns@ttable(學(xué)號char(10),姓名varchar(20),性別char(2),課程名稱varchar(20),成績int)asbegininsertinto@tselectS1.學(xué)號,姓名,性別,課程名稱,成績from學(xué)生表S1,班級表C1,課程表C2,成績表S2WhereS1.班級編號=C1.班級編號andS1.學(xué)號=S2.學(xué)號andC2.課程編號=S2.課程編號and班級名稱=@classnameand課程名稱=@coursenamereturnend

SQLServer2008項(xiàng)目實(shí)訓(xùn)教程用戶自定義函數(shù)【例】創(chuàng)建多語句表值函數(shù)UF_Class_score,根據(jù)輸入的班級名稱和課程名稱返回該班所有學(xué)生的學(xué)號、姓名、性別、課程名稱和成績,并利用該函數(shù)查詢“11網(wǎng)絡(luò)技術(shù)”班“數(shù)據(jù)庫技術(shù)與應(yīng)用”課程的成績。--應(yīng)用函數(shù)select*fromUF_Class_score('11網(wǎng)絡(luò)技術(shù)','數(shù)據(jù)庫技術(shù)與應(yīng)用')

SQLServer2008項(xiàng)目實(shí)訓(xùn)教程存儲過程

存儲過程(StoredProcedure)是一組完成特定功能的Transact-SQL語句集,經(jīng)編譯后存儲在數(shù)據(jù)庫中,用戶調(diào)用過程名和給出參數(shù)來調(diào)用它們。

SQLServer2008項(xiàng)目實(shí)訓(xùn)教程存儲過程的特點(diǎn)允許模塊化程序設(shè)計(jì),提高代碼的重用性執(zhí)行速度快有效降低網(wǎng)絡(luò)流量提高數(shù)據(jù)庫的安全性

SQLServer2008項(xiàng)目實(shí)訓(xùn)教程存儲過程的分類系統(tǒng)存儲過程用戶自定義存儲過程擴(kuò)展存儲過程

SQLServer2008項(xiàng)目實(shí)訓(xùn)教程存儲過程的分類(續(xù))系統(tǒng)存儲過程

SQLServer2008項(xiàng)目實(shí)訓(xùn)教程存儲過程的分類(續(xù))用戶自定義存儲過程用戶自定義存儲過程是指封裝的由用戶創(chuàng)建,能完成某一特定的功能的可重用代碼的模塊或例程。擴(kuò)展存儲過程擴(kuò)展存儲過程是指使用編程語言(例如C)創(chuàng)建自己的外部例程,是指MicrosoftSQLServer的實(shí)例可以動態(tài)加載和運(yùn)行的DLL,以“XP_”為前綴。

SQLServer2008項(xiàng)目實(shí)訓(xùn)教程

存儲過程語法格式語法格式:

CREATE[PROC|PROCEDURE]存儲過程名[;number][{@參數(shù)名稱參數(shù)數(shù)據(jù)類型}[VARYING][=參數(shù)的默認(rèn)值][OUTPUT]][,...n][WITHENCRYPTION][WITHRECOMPILE]ASsql_statement

參數(shù):Number:用來對同名的過程分組,以便用一條dropproc語句即可將同組的過程一起除去。@參數(shù)名稱:存儲過程可以沒有參數(shù)。也可以聲明一個或多個參數(shù),參數(shù)名稱必須@作為第一個字符。VARYING表示指定作為輸出參數(shù)支持的結(jié)果集,僅適用于游標(biāo)參數(shù)。參數(shù)可設(shè)置默認(rèn)值,如后面帶OUTPUT,表示為輸出參數(shù)。WITHENCRYPTION:對存儲過程加密,其他用戶無法查看存儲過程的定義。WITHRECOMPILE:每次執(zhí)行該存儲過程都重新進(jìn)行編譯。sql_statemen:該存儲過程中定義的編程語句。

SQLServer2008項(xiàng)目實(shí)訓(xùn)教程存儲過程的組成存儲過程的定義中包含如下的兩個主要組成部分。(1)過程名稱及其參數(shù)的說明:包括所有的輸入?yún)?shù)以及傳給調(diào)用者的輸出參數(shù)。(2)過程的主體:也稱為過程體,針對數(shù)據(jù)庫的操作語句(T-SQL語句),包括調(diào)用其它存儲過程的語句。

SQLServer2008項(xiàng)目實(shí)訓(xùn)教程不帶參數(shù)的存儲過程1、創(chuàng)建不帶參數(shù)的存儲過程語法格式:CREATE[PROC|PROCEDURE]存儲過程名

[WITHENCRYPTION][WITHRECOMPILE]ASsql_statement【例】創(chuàng)建一個名為s_inf的存儲過程,用于查詢學(xué)生的信息。createprocedures_infasselect*from學(xué)生表

SQLServer2008項(xiàng)目實(shí)訓(xùn)教程不帶參數(shù)的存儲過程【例】創(chuàng)建一個名為s_lili_score存儲過程,用于查詢“李麗”的學(xué)號、姓名、性別、出生日期以及所有課程的成績。createprocedures_lili_scoreasselectS1.學(xué)號,姓名,性別,出生日期,成績from學(xué)生表S1,成績表S2whereS1.學(xué)號=S2.學(xué)號and姓名=‘李麗'

SQLServer2008項(xiàng)目實(shí)訓(xùn)教程不帶參數(shù)的存儲過程(續(xù))

執(zhí)行不帶參數(shù)的存儲過程語法結(jié)構(gòu)如下。

EXEC[UTE]存儲過程名【例】執(zhí)行創(chuàng)建的s_inf和s_lili_score存儲過程。

EXECs_infEXECs_lili_score

SQLServer2008項(xiàng)目實(shí)訓(xùn)教程帶輸入?yún)?shù)的存儲過程創(chuàng)建帶輸入?yún)?shù)的存儲過程CREATE[PROC|PROCEDURE]存儲過程名

[{@參數(shù)名稱參數(shù)數(shù)據(jù)類型}[=參數(shù)的默認(rèn)值][,...n][WITHENCRYPTION][WITHRECOMPILE]ASsql_statement【例】創(chuàng)建存儲過程stu_count,實(shí)現(xiàn)根據(jù)輸入的系部名稱輸出給定系部的學(xué)生人數(shù)。createprocstu_count@dnamevarchar(20)asselectcount(學(xué)號)學(xué)生人數(shù)from部門表D,班級表C,學(xué)生表SwhereD.系部編號=C.系部編號andC.班級編號=S.班級編號and系部名稱=@dname

SQLServer2008項(xiàng)目實(shí)訓(xùn)教程帶輸入?yún)?shù)的存儲過程(續(xù))執(zhí)行輸入?yún)?shù)的存儲過程兩種方法:(1)使用參數(shù)名傳遞參數(shù)值執(zhí)行的語法結(jié)構(gòu)如下。EXEC存儲過程名[@參數(shù)名=參數(shù)值][DEFAULT][,…n]execstu_count@dname='信息工程系'(2)按位置傳遞參數(shù)值EXEC存儲過程名[參數(shù)值1,參數(shù)值2,…]execstu_count'信息工程系'

SQLServer2008項(xiàng)目實(shí)訓(xùn)教程帶輸出參數(shù)的存儲過程1、創(chuàng)建帶輸出參數(shù)的存儲過程語法如下。@參數(shù)名數(shù)據(jù)類型[=默認(rèn)值]OUTPUT【例】創(chuàng)建存儲過程stuname,實(shí)現(xiàn)根據(jù)輸入學(xué)生的學(xué)號,輸出該學(xué)生的姓名和政治面貌。并調(diào)用該存儲過程返回“001”號學(xué)生的姓名和政治面貌。createprocstuname@學(xué)號char(8),@姓名varchar(20)output,@政治面貌varchar(10)outputasselect@姓名=姓名,@政治面貌=政治面貌from學(xué)生表where學(xué)號=@學(xué)號

SQLServer2008項(xiàng)目實(shí)訓(xùn)教程帶輸出參數(shù)的存儲過程2、執(zhí)行帶輸出參數(shù)的存儲過程語法如下。EXEC[UTE]存儲過程名[[@參數(shù)名=]{參數(shù)值|@變量[OUTPUT]|[默認(rèn)值]}][,...n]declare@stunamevarchar(20),@stuzvarchar(10)execstuname‘001’,@stunameoutput,@stuzoutputselect@stuname姓名,@stuz政治面貌

SQLServer2008項(xiàng)目實(shí)訓(xùn)教程查看存儲過程(1)sp_help用于顯示存儲過程的參數(shù)及其數(shù)據(jù)類型。語法格式如下。sp_help[[@objname=]存儲過程名](2)sp_helptext用于顯示存儲過程的源代碼。語法格式如下。sp_helptext[[@objname=]存儲過程]

SQLServer2008項(xiàng)目實(shí)訓(xùn)教程刪除用戶存儲過程

刪除用戶存儲過程可以使用DROP命令。語法格式如下。DROP{PROC|PROCEDURE}存儲過程名[,...n]

SQLServer2008項(xiàng)目實(shí)訓(xùn)教程修改存儲過程ALTERPROCEDURE語句的語法格式如下。ALTER[PROC|PROCEDURE]存儲過程名

[{@參數(shù)名稱參數(shù)數(shù)據(jù)類型}[=參數(shù)的默認(rèn)值][OUTPUT]][,...n][WITHENCRYPTION][WITHRECOMPILE]ASsql_statement

SQLServer2008項(xiàng)目實(shí)訓(xùn)教程系統(tǒng)存儲過程常用系統(tǒng)存儲過程:sp_tables:返回可在當(dāng)前環(huán)境中查詢的對象列表。這代表可在FROM子句中出現(xiàn)的任何對象。sp_stored_procedures:返回當(dāng)前環(huán)境中的存儲過程列表。sp_rename:在當(dāng)前數(shù)據(jù)庫中更改用戶創(chuàng)建對象的名稱。此對象可以是表、索引、列、別名數(shù)據(jù)類型。sp_renamedb:更改數(shù)據(jù)庫的名稱。sp_help:報(bào)告有關(guān)數(shù)據(jù)庫對象(sys.sysobjects兼容視圖中列出的所有對象)、用戶定義數(shù)據(jù)類型或SQLServer2005提供的數(shù)據(jù)類型的信息。sp_helptext:示用戶定義規(guī)則的定義、默認(rèn)值、未加密的Transact-SQL存儲過程、用戶定義Transact-SQL函數(shù)、觸發(fā)器、計(jì)算列、CHECK約束、視圖或系統(tǒng)對象(如系統(tǒng)存儲過程)。sp_who:提供有關(guān)MicrosoftSQLServerDatabaseEngine實(shí)例中的當(dāng)前用戶和進(jìn)程的信息。sp_password:為MicrosoftSQLServer登錄名添加或更改密碼。

SQLServer2008項(xiàng)目實(shí)訓(xùn)教程創(chuàng)建存儲過程需要考慮的因素:(1)一個存儲過程完成一個任務(wù)。(2)不要使用sp_來命名用戶存儲過程。(3)可以使用WITHENCRYPTION加密存儲過程,以免存儲過程的源代碼被人查閱。(4)在服務(wù)器上創(chuàng)建、測試存儲過程。

SQLServer2008項(xiàng)目實(shí)訓(xùn)教程觸發(fā)器

觸發(fā)器通??梢酝瓿梢欢ǖ臉I(yè)務(wù)規(guī)則,用于SQLServer約束、默認(rèn)值和規(guī)則的完整性檢查,還可以完成難以用普通約束實(shí)現(xiàn)的復(fù)雜功能的限制。

SQLServer2008項(xiàng)目實(shí)訓(xùn)教程觸發(fā)器的分類DML觸發(fā)器當(dāng)數(shù)據(jù)庫中發(fā)生數(shù)據(jù)操作語言(insert、update、delete)事件時將調(diào)用DML觸發(fā)器。主要用來實(shí)現(xiàn)表之間的級聯(lián)更新或刪除,以及防止惡意或錯誤的插入、更新和刪除操作。DDL觸發(fā)器在CREATE、ALTER、DROP和其他DDL語句上操作時發(fā)生的觸發(fā)器稱為DDL觸發(fā)器。主要用來記錄數(shù)據(jù)庫的修改過程,以及限制程序員對數(shù)據(jù)庫的修改。

SQLServer2008項(xiàng)目實(shí)訓(xùn)教程DML觸發(fā)器的分類根據(jù)觸發(fā)器觸發(fā)方式的不同,可分為:AFTER觸發(fā)器:在數(shù)據(jù)修改完成后,觸發(fā)器被激活。執(zhí)行順序如下。數(shù)據(jù)表約束檢查→修改表中的數(shù)據(jù)→激活觸發(fā)器INSTEADOF觸發(fā)器:這類觸發(fā)器會取代原來要進(jìn)行的操作,在數(shù)據(jù)更改之前發(fā)生,數(shù)據(jù)的如何更改完全取決于觸發(fā)器的內(nèi)容,執(zhí)行順序如下。激活觸發(fā)器→若觸發(fā)器涉及數(shù)據(jù)更改,則檢查表約束CLR觸發(fā)器:CLR觸發(fā)器將執(zhí)行在托管代碼中編寫的方法,而不用執(zhí)行T-SQL存儲過程。

SQLServer2008項(xiàng)目實(shí)訓(xùn)教程DML觸發(fā)器創(chuàng)建觸發(fā)器的語法格式如下。CREATETRIGGER觸發(fā)器名

ON表名或視圖名

[WITHENCRYPTION]{FOR|AFTER|INSTEADOF}//選擇觸發(fā)器的類型{INSERT[,]|UPDATE[,]|DELETE}//用來指明哪種數(shù)據(jù)操作將激活觸發(fā)器[NOTFORREPLICATION]AS[IFUPDATE(列名1)[{AND|OR}UPDATE(列名2)[…n]//用來確定對某一確定列進(jìn)行插入操作還是更新操作,但不與刪除操作用在一起

sql_statements

SQLServer2008項(xiàng)目實(shí)訓(xùn)教程INSERTED表和DELETED表操作類型INSERTED表DELETED表INSERT插入的記錄不創(chuàng)建DELETE不創(chuàng)建刪除的記錄UPDATE修改后的記錄修改前的記錄DML觸發(fā)器都會創(chuàng)建兩個臨時的用于記錄更改前后變化的表:INSERTED和DELETED,表的結(jié)構(gòu)和創(chuàng)建觸發(fā)器的表的結(jié)構(gòu)相同。在執(zhí)行DML操作時,兩個表的記錄如下:對具有觸發(fā)器的表進(jìn)行insert、delete和update操作時,過程分別如下:1.Insert操作:插入到表中的新行被復(fù)制到inserted表中。2.Delete操作:從表中刪除的行轉(zhuǎn)移到了deleted表中。3.Update操作:先從表中刪除舊行,然后向表中插入新行。其中,刪除后的舊行被轉(zhuǎn)移到deleted表中,插入到表中的新行被復(fù)制到inserted表中。

SQLServer2008項(xiàng)目實(shí)訓(xùn)教程創(chuàng)建DML觸發(fā)器1、INSERT觸發(fā)器INSERT觸發(fā)器通常被用來驗(yàn)證被觸發(fā)器監(jiān)控的字段中的數(shù)據(jù)滿足要求的標(biāo)準(zhǔn),以確保數(shù)據(jù)完整性。【例】創(chuàng)建名為reminder的觸發(fā)器,當(dāng)用戶向部門表中插入一條系部記錄時,向客戶端發(fā)送一條提示消息“插入一條記錄!”。

--創(chuàng)建觸發(fā)器

createtriggerreminderon部門表forinsertasprint'插入一條記錄!’

--測試觸發(fā)器insert部門表values(14,‘管理系’,‘王明陽')

SQLServer2008項(xiàng)目實(shí)訓(xùn)教程創(chuàng)建DML觸發(fā)器2、DELETE觸發(fā)器當(dāng)激發(fā)delete觸發(fā)器時,被刪除的記錄轉(zhuǎn)移到deleted表中,數(shù)據(jù)表中將不再存在該記錄。

【例】在學(xué)生表上創(chuàng)建一個觸發(fā)器,其功能為:當(dāng)對學(xué)生表進(jìn)行刪除操作時,首先檢查要刪除的學(xué)生是否為11網(wǎng)絡(luò)技術(shù)班的學(xué)生,如果不是的話,可以刪除該學(xué)生;否則撤銷此刪除,并顯示無法刪除的信息。--創(chuàng)建觸發(fā)器

createtriggerstu_delon學(xué)生表fordeleteasdeclare@cnamevarchar(20)select@cname=班級名稱from班級表joindeletedon班級表.班級編號=deleted.班級編號if(@cname='11網(wǎng)絡(luò)技術(shù)')beginprint'此為11網(wǎng)絡(luò)技術(shù)班學(xué)生,無法刪除記錄'rollbackend

--測試觸發(fā)器delete學(xué)生表where學(xué)號=’005’

SQLServer2008項(xiàng)目實(shí)訓(xùn)教程創(chuàng)建DML觸發(fā)器(續(xù))3、UPDATE觸發(fā)器

當(dāng)在定義有觸發(fā)器的表上執(zhí)行UPDATE語句時,原始行被移入到DELETED表,更新行被移入到INSERTED表。【例】創(chuàng)建了一個修改觸發(fā)器,禁止用戶更新學(xué)生表的學(xué)號字段值--創(chuàng)建觸發(fā)器

createtriggers_update

on學(xué)生表

afterupdate

as

ifupdate(學(xué)號)

begin

raiserror('不允許修改主鍵列!',16,1)

rollbacktran

end

--測試觸發(fā)器

update學(xué)生表set學(xué)號='012'where學(xué)號='004'

SQLServer2008項(xiàng)目實(shí)訓(xùn)教程創(chuàng)建DML觸發(fā)器(續(xù))【例】在成績表上創(chuàng)建觸發(fā)器trscore,檢查插入或更新的成績是否在0~100之間。--創(chuàng)建觸發(fā)器

ifexists(selectnamefromsysobjectswherename='trscore'andtype='tr')droptriggertrscoregocreatetriggertrscoreon成績表forinsert,updateasdeclare@scoreintselect@score=成績frominsertedif@score<0or@score>100beginprint'成績必須在0到100之間!'rollbackendgo--測試觸發(fā)器insert成績表values('004','x004',-50)goupdate成績表set成績=120where編號=3go

SQLServer2008項(xiàng)目實(shí)訓(xùn)教程創(chuàng)建DML觸發(fā)器(續(xù))【例】將上例改成使用insteadof觸發(fā)器來實(shí)現(xiàn)。--修改觸發(fā)器altertriggertrscoreon成績表insteadofinsert,updateassetnocountondeclare@scoredecimal(4,1),@snochar(8),@coursenochar(4)set@sno=(select學(xué)號frominserted)set@courseno=(select課程編號frominserted)select@score=成績frominsertedIf@score<0or@score>100beginprint'成績必須在0到100之間!'rollbackendelsebegininsert成績表values(@sno,@courseno,@score)endgo

SQLServer2008項(xiàng)目實(shí)訓(xùn)教程創(chuàng)建DML觸發(fā)器(續(xù))--測試觸發(fā)器insert成績表values('004','x004',-50)goupdate成績表set成績=120where編號=3go

SQLServer2008項(xiàng)目實(shí)訓(xùn)教程修改觸發(fā)器使用ManagementStudio使用ALTERTRIGGER語句語法格式如下。ALTERTRIGGER要修改的觸發(fā)器名

ON表名或視圖名

[WITHENCRYPTION](FOR|AFTER|INSTEADOF){[DELETE][,][INSERT][,][UPDATE]}ASsql_statements

SQLServer2008項(xiàng)目實(shí)訓(xùn)教程DDL觸發(fā)器DDL觸發(fā)器常用于如下的情況。防止對數(shù)據(jù)庫架構(gòu)進(jìn)行某些更改。響應(yīng)數(shù)據(jù)庫架構(gòu)中的更改。記錄數(shù)據(jù)庫架構(gòu)中的更改或事件創(chuàng)建DDL觸發(fā)器的語法格式如下。CREATETRIGGER觸發(fā)器名ON{ALLSERVER|DATABASE}[WITHENCRYPTION]{FOR|AFTER}{DDL事件}[,...n]ASsql_statement

SQLServer2008項(xiàng)目實(shí)訓(xùn)教程創(chuàng)建DDL觸發(fā)器【例】創(chuàng)建DDL觸發(fā)器trig_ddl,該觸發(fā)器禁止對所有表的結(jié)構(gòu)修改及刪除。--創(chuàng)建觸發(fā)器

createtriggertrig_ddl

ondatabaseforcreate_table,alter_table,drop_table

asbeginraiserror(’該數(shù)據(jù)庫不允許進(jìn)行架構(gòu)更改!’,16,9)rollbackend--測試觸發(fā)器altertable學(xué)生表addAint

SQLServer2008項(xiàng)目實(shí)訓(xùn)教程查看觸發(fā)器使用系統(tǒng)存儲過程sp_help、sp_helptext和sp_depents分別查看觸發(fā)器的不同信息。sp_help:顯示觸發(fā)器的所有者和創(chuàng)建時間sp_helptext:顯示觸發(fā)器的源代碼sp_depends:顯示該觸發(fā)器參考的對象清單

SQLServer2008項(xiàng)目實(shí)訓(xùn)教程刪除觸發(fā)器使用ManagementStudio使用DROPTRIGGER命令。語法格式如下。DROPTRIGGERtrigger_name[,...n]ON{DATABASE|ALLSERVER}[;]

SQLServer2008項(xiàng)目實(shí)訓(xùn)教程禁止或啟用觸發(fā)器禁用觸發(fā)器當(dāng)不再需要某個觸發(fā)器時,可將其禁用或刪除。語法格式如下。DISABLETRIGGER{ALL|觸發(fā)器名[,...n]}ON{object_name|DATABASE|ALLSERVER}

啟用觸發(fā)器語法格式如下。ENABLETRIGGER{ALL|觸發(fā)器名[,...n]}ON{object_name|DATABASE|ALLSERVER}

SQLServer2008項(xiàng)目實(shí)訓(xùn)教程游標(biāo)

游標(biāo)(cursor)是系統(tǒng)為用戶開設(shè)的一個數(shù)據(jù)緩沖區(qū),存放SQL語句的執(zhí)行結(jié)果。每個游標(biāo)區(qū)都有一個名字。用戶可以用SQL語句逐一從游標(biāo)中獲取記錄,并賦給主變量,交由主語言進(jìn)一步處理。即通過游標(biāo)可對結(jié)果集逐行處理。

SQLServer2008項(xiàng)目實(shí)訓(xùn)教程游標(biāo)

游標(biāo)總是與一條SQL選擇語句相關(guān)聯(lián)。游標(biāo)由結(jié)果集(可以是零條、一條或由相關(guān)的選擇語句檢索出的多條記錄)和結(jié)果集中指向特定記錄的游標(biāo)位置組成。當(dāng)對結(jié)果集進(jìn)行處理時,必須聲明一個指向該結(jié)果集的游標(biāo)。

SQLServer2008項(xiàng)目實(shí)訓(xùn)教程游標(biāo)的特點(diǎn)允許程序?qū)Σ樵冋Z句返回的記錄集中的每一行執(zhí)行相應(yīng)的操作,而不是對整個記錄集操作;提高對基于游標(biāo)位置的表中記錄的刪除和更新;作為數(shù)據(jù)庫管理系統(tǒng)面向行的應(yīng)用程序之間的橋梁。

SQLServer2008項(xiàng)目實(shí)訓(xùn)教程游標(biāo)的分類

游標(biāo)分為:T-SQL游標(biāo),API服務(wù)器游標(biāo)和客戶游標(biāo)。(1)T-SQL游標(biāo)由SQLServer服務(wù)器實(shí)現(xiàn)的游標(biāo),主要通過T-SQL腳本、存儲過程和觸發(fā)器將游標(biāo)傳給服務(wù)器執(zhí)行。(2)API游標(biāo)

API游標(biāo)支持在OLEDB,ODBC以及DB_library中使用游標(biāo)函數(shù),主要用在服務(wù)器上。每一次客戶端應(yīng)用程序調(diào)用API游標(biāo)函數(shù),MSSQLSEVER的OLEDB提供者、ODBC驅(qū)動器或DB_library的動態(tài)鏈接庫(DLL)都會將這些客戶請求傳送給服務(wù)器以對API游標(biāo)進(jìn)行處理。(3)客戶游標(biāo)客戶游標(biāo)主要是當(dāng)在客戶機(jī)上緩存結(jié)果集時才使用,是前臺游標(biāo)。在一般情況下,服務(wù)器游標(biāo)能支持絕大多數(shù)的游標(biāo)操作。而客戶游標(biāo)常常被用作服務(wù)器游標(biāo)的輔助。

SQLServer2008項(xiàng)目實(shí)訓(xùn)教程游標(biāo)創(chuàng)建游標(biāo)的語法格式如下。DECLARE游標(biāo)名[INSENSITIVE]|SCROLLCURSORFORselect_statement

其中,INSENSITIVE:表示不敏感游標(biāo),即游標(biāo)不會隨基本表內(nèi)容的改變而改變,也無法通過游標(biāo)更新數(shù)據(jù)。SCROLL:表示滑動游標(biāo),可指定游標(biāo)的移動方向,包括first、last、prior、next、relative、absolute

SQLServer2008項(xiàng)目實(shí)訓(xùn)教程游標(biāo)打開游標(biāo)OPEN游標(biāo)名游標(biāo)定義后,如要讀取數(shù)據(jù),則必須先打開游標(biāo)。提取游標(biāo)數(shù)據(jù)

FETCH[next|prior|first|last|absolute{n|@var}|relative{n|@var}]FROM游標(biāo)名INTO@var注意:執(zhí)行FETCH語句后,可通過@@FETCH_STATUS全局變量返回游標(biāo)當(dāng)前的狀態(tài)。其有3個返回值:

0——FETCH語句執(zhí)行成功。

1——FETCH語句執(zhí)行失敗或行數(shù)據(jù)超過游標(biāo)結(jié)果集范圍。

2——表示提取的數(shù)據(jù)不存在。關(guān)閉/釋放游標(biāo)

CLOSE/DEALLOCATE游標(biāo)名

SQLServer2008項(xiàng)目實(shí)訓(xùn)教程游標(biāo)【例】現(xiàn)需要為“11網(wǎng)絡(luò)技術(shù)”班學(xué)生打印所有課程的成績通知單,樣式如下:

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論