




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第九章
SQLServer數(shù)據(jù)庫基礎(chǔ)
1編輯版pppt本章要點(diǎn)客戶/服務(wù)器體系結(jié)構(gòu)SQLServer2000應(yīng)用環(huán)境概述Transact-SQL程序設(shè)計(jì)存儲(chǔ)過程觸發(fā)器2編輯版pppt9.1客戶/服務(wù)器體系結(jié)構(gòu)從技術(shù)角度看,客戶/服務(wù)器結(jié)構(gòu)本身是一個(gè)非常簡(jiǎn)單的概念。它是將計(jì)算機(jī)應(yīng)用的大任務(wù)分解成多個(gè)子任務(wù),由多臺(tái)計(jì)算機(jī)協(xié)同完成。客戶機(jī)接收客戶的數(shù)據(jù)和處理要求,執(zhí)行相應(yīng)程序,把其中的服務(wù)請(qǐng)求發(fā)給服務(wù)器,即向服務(wù)器提出對(duì)某種信息或數(shù)據(jù)的服務(wù)請(qǐng)求,系統(tǒng)將選擇最適宜完成該任務(wù)的服務(wù)器完成處理,服務(wù)器將結(jié)果作為服務(wù)響應(yīng)返回客戶。在這一過程中,多任務(wù)之間存在多種交互關(guān)系,即“服務(wù)請(qǐng)求/服務(wù)響應(yīng)”關(guān)系。因此客戶/服務(wù)器不應(yīng)理解為是一種硬件結(jié)構(gòu),而是一種計(jì)算(處理)模式。3編輯版pppt9.1客戶/服務(wù)器體系結(jié)構(gòu)
客戶/服務(wù)器具有以下幾個(gè)特征:服務(wù)位置透明性可擴(kuò)展性4編輯版pppt9.2SOLServer2000應(yīng)用環(huán)境概述SQLServer是一個(gè)關(guān)系數(shù)據(jù)庫管理系統(tǒng),最初由Microsoft,Sybase和Ashton-Tate三家公司聯(lián)合開發(fā)的,于1988年推出了第一個(gè)OS/2版本。后來,Ashton-Tate公司退出了SQLServer的開發(fā)。而在WindowsNT推出后,Microsoft與Sybase在SQLServer的開發(fā)上就分道揚(yáng)鑣了,Microsoft將SQLServer移植到WindowsNT系統(tǒng)上,專注于開發(fā)推廣SQLServer的WindowsNT版本;Sybase則較專注于SQLServer在UNIX操作系統(tǒng)上的應(yīng)用。1996年,Microsoft推出了SQLServer6.5版本,1998年,SQLServer7.0版本和用戶見面;我們介紹的SQLServer2000是Microsoft公司2000推出的最新版本。5編輯版pppt9.2SOLServer2000應(yīng)用環(huán)境概述MicrosoftSQLServer2000包括四個(gè)常見版本:⑴企業(yè)版(EnterpriseEdition)⑵標(biāo)準(zhǔn)版(StandardEdition)⑶個(gè)人版(PersonalEdition)⑷開發(fā)者版(DeveloperEdition)此外,SQLServer2000還有DesktopEngine(桌面引擎)和在WindowsCE設(shè)備上進(jìn)行數(shù)據(jù)存儲(chǔ)的WindowsCE版,用戶可以根據(jù)實(shí)際情況選擇所要安裝的SQLServer2000版本。6編輯版pppt9.2.2SQLServer數(shù)據(jù)庫組成每個(gè)SQL服務(wù)器都有兩種類型的數(shù)據(jù)庫:系統(tǒng)數(shù)據(jù)庫(SystemDatabase)和用戶數(shù)據(jù)庫(UserDatabase),如圖9.2所示。系統(tǒng)數(shù)據(jù)庫一般用于存儲(chǔ)SQLServer的系統(tǒng)信息,SQLServer用系統(tǒng)數(shù)據(jù)庫來操作和管理系統(tǒng)。用戶數(shù)據(jù)庫是用戶所創(chuàng)建的數(shù)據(jù)庫。
7編輯版pppt9.2.2SQLServer數(shù)據(jù)庫組成系統(tǒng)數(shù)據(jù)庫mastermodeltempdbmsdbUser1Northwindpubs圖9.2MicrosoftSQLServer數(shù)據(jù)庫用戶數(shù)據(jù)庫8編輯版pppt系統(tǒng)數(shù)據(jù)庫和用戶數(shù)據(jù)庫在結(jié)構(gòu)上完全相同。MicrosoftSQLServer數(shù)據(jù)庫有兩種主要的結(jié)構(gòu):物理結(jié)構(gòu)和邏輯結(jié)構(gòu)。數(shù)據(jù)庫的物理存儲(chǔ)結(jié)構(gòu)是討論數(shù)據(jù)庫文件是如何在磁盤上存儲(chǔ)的,數(shù)據(jù)庫的邏輯存儲(chǔ)結(jié)構(gòu)指的是數(shù)據(jù)庫是由哪些性質(zhì)的信息組成。圖9.3中的Table就是組成數(shù)據(jù)庫的邏輯成分,而物理實(shí)現(xiàn)部分的mdf文件構(gòu)成了數(shù)據(jù)庫的物理結(jié)構(gòu)。9編輯版pppt物理結(jié)構(gòu)是指實(shí)際存儲(chǔ)的數(shù)據(jù),其構(gòu)架包括文件,文件組,頁,盤區(qū)等。文件包括數(shù)據(jù)庫文件和事物日志文件,SQLServer的數(shù)據(jù)和日志文件可以放置在FAT或NTFS文件系統(tǒng)中,但不能放在壓縮文件系統(tǒng)中。物理結(jié)構(gòu)圖9.3MicrosoftSQLServer數(shù)據(jù)庫結(jié)構(gòu)簡(jiǎn)化示意圖10編輯版pppt⑴頁和盤區(qū)頁是基本存儲(chǔ)單位,大小為8KB/頁。頁包含了數(shù)據(jù)本身以及數(shù)據(jù)的物理存放位置的信息。每頁的開始96字節(jié)就是用于存儲(chǔ)系統(tǒng)信息的,如頁大小,剩余空間大小和該頁所屬對(duì)象的ID。在SQLServer2000數(shù)據(jù)庫系統(tǒng)中,頁的類型有8種,如表9.1所示。表9.1SQLServer2000頁的類型11編輯版pppt表9.1SQLServer2000頁的類型頁類型內(nèi)容數(shù)據(jù)引擎文本和圖象全局分配圖,輔助全局分配圖頁剩余空間索引分配圖批修改圖變化圖包含數(shù)據(jù)行中除text,ntext和image數(shù)據(jù)外的所有數(shù)據(jù)索引屬性text,ntext和image數(shù)據(jù)有關(guān)盤區(qū)分配的信息關(guān)于頁剩余空間的信息有關(guān)表或索引所使用的盤區(qū)的信息從上次執(zhí)行BASKUPLOG語句到批操作之間所修改的盤區(qū)信息從上次執(zhí)行BACKUPDATABASE到現(xiàn)在的更改的盤區(qū)的信息12編輯版pppt在數(shù)據(jù)頁上,數(shù)據(jù)行緊接著頁首按順序放置。在頁尾有一個(gè)行偏表。在行偏表中,頁面上的每一行都有一個(gè)條目,每個(gè)條目記錄那一行的第一個(gè)字節(jié)與頁首的距離。行偏移的條目序列與頁中行的序列相反,見圖9.4。在SQLServer中,行不能跨頁。數(shù)據(jù)頁結(jié)構(gòu)首頁數(shù)據(jù)1數(shù)據(jù)2可用空間123數(shù)據(jù)3圖9.4MicrosoftSQLServer數(shù)據(jù)頁的結(jié)構(gòu)13編輯版pppt盤區(qū)首頁數(shù)據(jù)1數(shù)據(jù)2可用空間123數(shù)據(jù)3圖9.4MicrosoftSQLServer數(shù)據(jù)頁的結(jié)構(gòu)盤區(qū)是為表和索引分配存儲(chǔ)空間的基本單元,大小為8個(gè)相鄰的頁,即64KB。為了使空間指派更有效。SQLServer2000對(duì)只含少量數(shù)據(jù)的表不分配完整的盤區(qū)。SQLServer2000有兩種類型的盤區(qū):統(tǒng)一擴(kuò)展盤區(qū),由單個(gè)對(duì)象所有,8頁全部只能由擁有該盤區(qū)的對(duì)象使用;混合擴(kuò)展盤區(qū),最多可由8個(gè)對(duì)象共享。通常從混合擴(kuò)展盤區(qū)中向新表或新索引分配頁。當(dāng)表或索引增長(zhǎng)到8頁時(shí),就變成統(tǒng)一擴(kuò)展盤區(qū),如果在現(xiàn)有表上創(chuàng)建索引,并且該表包含的行足以在索引中生成8頁,則對(duì)該索引的所有分配都在統(tǒng)一擴(kuò)展盤區(qū)內(nèi)進(jìn)行。14編輯版pppt數(shù)據(jù)庫文件(DatabaseFile)是存放數(shù)據(jù)庫和數(shù)據(jù)庫對(duì)象的文件。一個(gè)數(shù)據(jù)庫可以有一個(gè)或多個(gè)數(shù)據(jù)庫文件,一個(gè)數(shù)據(jù)庫文件只屬于一個(gè)數(shù)據(jù)庫。當(dāng)有多個(gè)數(shù)據(jù)庫文件時(shí),有一個(gè)文件被定義為主數(shù)據(jù)庫文件(PrimaryDatabaseFile),擴(kuò)展名為.mdf,它用來存儲(chǔ)數(shù)據(jù)庫的啟動(dòng)信息和部分或全部信息。一個(gè)數(shù)據(jù)庫只能有一個(gè)主數(shù)據(jù)庫文件。其他數(shù)據(jù)庫文件被稱為次數(shù)據(jù)庫文件(SecondaryDatabaseFile),擴(kuò)展名為.ndf,用來存儲(chǔ)主文件沒存儲(chǔ)的其他數(shù)據(jù)。在數(shù)據(jù)龐大時(shí),次數(shù)據(jù)庫文件可以幫助存儲(chǔ)數(shù)據(jù)。⑵數(shù)據(jù)庫文件15編輯版pppt采用多個(gè)數(shù)據(jù)庫文件來存儲(chǔ)數(shù)據(jù)的優(yōu)點(diǎn)體現(xiàn)在:數(shù)據(jù)庫文件可以不斷擴(kuò)充而不受操作系統(tǒng)文件大小的限制??梢詫?shù)據(jù)庫文件存儲(chǔ)在不同的硬盤中,這樣可以同時(shí)對(duì)幾個(gè)硬盤做數(shù)據(jù)存取,提高了數(shù)據(jù)處理的效率,這對(duì)于服務(wù)型的計(jì)算機(jī)尤為有用。事務(wù)日志文件事務(wù)日志文件(TransactionLogFile)是用來記錄數(shù)據(jù)庫更新情況的文件,擴(kuò)展名.ldf。例如,使用INSERT,UPDATE,DELETE等對(duì)數(shù)據(jù)庫進(jìn)行更改的操作都會(huì)記錄在此文件中,而如SELECT等對(duì)數(shù)據(jù)庫內(nèi)容不會(huì)有影響的操作則不會(huì)記錄在案。一個(gè)數(shù)據(jù)庫可以有一個(gè)或多個(gè)事務(wù)日志文件。SQLServer中采用“提前寫日志(Write-AheadLogging)”方式,即對(duì)數(shù)據(jù)庫的修改先寫入事務(wù)日志中,再寫入數(shù)據(jù)庫。
⑵數(shù)據(jù)庫文件16編輯版pppt為了便于分配和管理,SQLServer允許將多個(gè)文件歸納為一組,并賦予此組一個(gè)名稱,這就是文件組(FileGroup),文件組是將多個(gè)數(shù)據(jù)庫文件集合起來形成的一個(gè)整體。每個(gè)文件組有一個(gè)組名。一個(gè)文件只能存在于一個(gè)文件組中,一個(gè)文件組也只能被一個(gè)數(shù)據(jù)庫使用。與數(shù)據(jù)庫文件一樣,文件組也分為主文件組和次文件組,主文件中包含了所有的系統(tǒng)表。當(dāng)建立數(shù)據(jù)庫時(shí),主文件組包括主數(shù)據(jù)庫文件和未明確指定組的其他文件。文件組中可以指定一個(gè)缺省文件組,那么在創(chuàng)建數(shù)據(jù)庫文件時(shí),如果沒有指定將其放在哪一個(gè)文件組中,就會(huì)將它放在缺省文件組中。如果沒有指定缺省文件組,則主文件組為缺省文件組。只有數(shù)據(jù)文件才能作為文件組的成員,日志文件不能作為文件組的成員。
(3)文件組17編輯版pppt邏輯結(jié)構(gòu)對(duì)應(yīng)存儲(chǔ)數(shù)據(jù)的抽象表示。SQLServer的數(shù)據(jù)庫不僅僅是數(shù)據(jù)的存儲(chǔ),所有與數(shù)據(jù)處理操作相關(guān)的信息都存儲(chǔ)在數(shù)據(jù)庫中,是一個(gè)存放數(shù)據(jù)的表和支持這些數(shù)據(jù)的存儲(chǔ)、檢索、安全性和完整性的邏輯成分所組成的集合。組成數(shù)據(jù)庫的所有邏輯成分稱為數(shù)據(jù)庫的對(duì)象,如:關(guān)系圖、表、視圖、存儲(chǔ)過程、用戶、角色、規(guī)則、默認(rèn)值、用戶自定義數(shù)據(jù)類型和用戶自定義函數(shù)等。SQLServer的對(duì)象名可以是對(duì)象的全名(完全限定名),也可以是對(duì)象的省略名(部分限定名)。完全限定名包含四個(gè)標(biāo)識(shí)符:服務(wù)器名,數(shù)據(jù)庫名,所有者名和數(shù)據(jù)庫對(duì)象名,順序如下:服務(wù)器名、數(shù)據(jù)庫名、所有者名、數(shù)據(jù)庫對(duì)象名(Server.database.owner.object),包含全部這四部分的對(duì)象名叫做全名。
邏輯結(jié)構(gòu)18編輯版pppt⑴表結(jié)構(gòu)和視圖表9.2常用的系統(tǒng)表sysloginssysdatadasessysmessagessysuserssysobjectsmastermastermaster全部全部系統(tǒng)表數(shù)據(jù)庫功能每個(gè)連接到SQL服務(wù)器的登錄帳號(hào),都有相應(yīng)的一行每個(gè)SQL服務(wù)器返回的警告或系統(tǒng)錯(cuò)誤,都有相應(yīng)的一行SQL服務(wù)器中每個(gè)數(shù)據(jù)庫,都有相應(yīng)的一行每個(gè)Windows用戶,Windows工作組,SQL服務(wù)器用戶和SQL服務(wù)器角色,都有相應(yīng)的一行數(shù)據(jù)庫中每個(gè)對(duì)象,都有相應(yīng)的一行19編輯版pppt⑵數(shù)據(jù)類型
SQLServer2000的數(shù)據(jù)類型分為系統(tǒng)數(shù)據(jù)類型與自定義數(shù)據(jù)類型。系統(tǒng)數(shù)據(jù)類型如表9.3(詳見教材)所示,只有字符與二進(jìn)制數(shù)據(jù)類型需要指定長(zhǎng)度,其他如整型,日期時(shí)間,浮點(diǎn)數(shù)據(jù)類型,定義時(shí)不用指定長(zhǎng)度,即長(zhǎng)度是默認(rèn)值。自定義數(shù)據(jù)類型是建立在SQLServer系統(tǒng)數(shù)據(jù)類型基礎(chǔ)上的。需要指定該類型的名稱,建立在其上的系統(tǒng)數(shù)據(jù)類型及是否允許為空。20編輯版pppt⑶存儲(chǔ)過程存儲(chǔ)過程是一組編譯在單個(gè)執(zhí)行計(jì)劃中的Transat-SQL語句??梢詮目蛻舳藨?yīng)用程序,或從其他存儲(chǔ)過程和觸發(fā)器來調(diào)用它。存儲(chǔ)過程幫助在不同的應(yīng)用程序之間實(shí)現(xiàn)一致的邏輯。在一個(gè)存儲(chǔ)過程中,可以設(shè)計(jì),編碼和測(cè)試執(zhí)行某個(gè)常用任務(wù)所需的SQL語句和邏輯。之后,每個(gè)需要執(zhí)行該任務(wù)的應(yīng)用程序只須執(zhí)行此存儲(chǔ)過程即可。將業(yè)務(wù)邏輯編入單個(gè)存儲(chǔ)過程還提供了單個(gè)控制點(diǎn),以確保業(yè)務(wù)規(guī)則正確執(zhí)行。存儲(chǔ)過程還可以提高性能。許多任務(wù)以一系列SQL語句來執(zhí)行。對(duì)前面SQL語句的結(jié)果所應(yīng)用的條件邏輯決定后面執(zhí)行的SQL語句。如果將這些SQL語句和條件邏輯寫入一個(gè)存儲(chǔ)過程,它們就成為服務(wù)器上一個(gè)執(zhí)行計(jì)劃的一部分,所有工作都可以在服務(wù)器上完成。應(yīng)用程序不必傳輸存儲(chǔ)過程中的所有SQL語句:它們只需傳輸包含過程名和參數(shù)值的EXECUTE。21編輯版pppt⑷用戶自定義函數(shù)在SQLServer2000中,用戶可以創(chuàng)建自定義函數(shù)。在SQLServer2000中用戶自定義函數(shù)是作為一個(gè)數(shù)據(jù)庫對(duì)象來管理的??梢允褂闷髽I(yè)管理器或Transat-SQL命令來創(chuàng)建,修改,刪除。22編輯版pppt⑸約束,規(guī)則,默認(rèn)值和觸發(fā)器表中列的屬性除了包含數(shù)據(jù)類型和長(zhǎng)度外,還有一些重要的信息,共同維護(hù)數(shù)據(jù)完整性。用于維護(hù)數(shù)據(jù)完整性的對(duì)象包括:約束,規(guī)則,默認(rèn)值和觸發(fā)器。其中,約束在第三章有簡(jiǎn)單的介紹。規(guī)則是一個(gè)向后兼容的功能,用于執(zhí)行一些與CHECK約束相同的功能。CHECK約束是用來限制列值的首選標(biāo)準(zhǔn)方法。CHECK約束比規(guī)則更簡(jiǎn)明,一個(gè)列只能應(yīng)用一個(gè)規(guī)則,但可以應(yīng)用多個(gè)CHECK約束。CHECK約束作為CREATETABLE語句的一部分進(jìn)行指定,而規(guī)則以單獨(dú)的對(duì)象創(chuàng)建,然后綁定到列上。如果在插入行時(shí)沒有指定列的值,那么將使用默認(rèn)值。默認(rèn)值可以是任何取值為常量的對(duì)象,例如,常量,內(nèi)置函數(shù)和數(shù)學(xué)表達(dá)式。在MicrosoftSQLServer2000中,觸發(fā)器是一類特殊的存儲(chǔ)過程,被定義為在表或視圖發(fā)出UPDATE,INSERT或DELETE語句時(shí)自動(dòng)執(zhí)行。觸發(fā)器是功能強(qiáng)大的工具,使每個(gè)站點(diǎn)可以在有數(shù)據(jù)修改時(shí)自動(dòng)強(qiáng)制執(zhí)行其業(yè)務(wù)規(guī)則。觸發(fā)器可以擴(kuò)展SQLServer約束,默認(rèn)值和規(guī)則的完整性邏輯檢查,但只要約束和默認(rèn)值提供了全部所需的功能,就應(yīng)使用約束和默認(rèn)值。在9.5節(jié)將詳細(xì)介紹觸發(fā)器。23編輯版pppt企業(yè)管理器查詢分析器服務(wù)管理器(ServerManager)客戶端網(wǎng)絡(luò)實(shí)用工具(ClientNetworkUtility)服務(wù)器網(wǎng)絡(luò)實(shí)用工具(ServerNetworkUtility)導(dǎo)入和導(dǎo)出數(shù)據(jù)(ImportandExportData)在IIS中設(shè)置SQLXML支持(ConfigureSQLXMLSupportinIIS)事件探查器(Profiler)聯(lián)機(jī)叢書(BookOnline)SQLServer的升級(jí)向?qū)?.2.3SQLServer工具24編輯版pppt9.3Transact-SQL程序設(shè)計(jì)Transact-SQL是SQLServer2000支持的數(shù)據(jù)庫語言,不但遵從入門級(jí)的SQL-92標(biāo)準(zhǔn)。而且還支持SQL-92標(biāo)準(zhǔn)的一些強(qiáng)大的擴(kuò)展。Transact-SQL也有類似于SQL語言的分類,不過做了許多擴(kuò)充,包括數(shù)據(jù)定義語言DDL(DataDefinitionLanguage)、數(shù)據(jù)操縱語言DML(DataManipulationLanguage)、數(shù)據(jù)控制語言DCL(DataControlLanguage)、系統(tǒng)存儲(chǔ)過程(SystemStoredProcedure)和一些附加的語言元素等。在第3章中,我們?cè)榻B了標(biāo)準(zhǔn)SQL語言的語法及其基本使用方法(包括DDL、DML和DCL)。在此只介紹Transact-SQL語言中與SQL-92不同的一些語句及格式,此外還介紹一些附加的語言元素,包括注釋、變量、運(yùn)算符、函數(shù)和流程控制語句。25編輯版pppt1.創(chuàng)建和管理數(shù)據(jù)庫創(chuàng)建數(shù)據(jù)庫包括:定義數(shù)據(jù)庫名;確定數(shù)據(jù)庫文件及其大?。淮_定事務(wù)日志文件的位置和大小。創(chuàng)建數(shù)據(jù)庫使用CREATEDATABASE語句,其語法為:9.3.1Transact-SQL的數(shù)據(jù)定義功能及實(shí)例 26編輯版ppptCREATEDATABASE<數(shù)據(jù)庫名>[ON[PRIMARY]([NAME=<邏輯數(shù)據(jù)文件名>]FILENAME=‘<操作數(shù)據(jù)文件路徑和文件名>’[,SIZE=<文件長(zhǎng)度>][,MAXSIZE=<最大長(zhǎng)度>][,F(xiàn)ILEROWTH=<文件增長(zhǎng)率>])[,…n]][LOGON([NAME=<邏輯日志文件名>,]FILENAME=‘<操作日志文件路徑和文件名>’[,SIZE=<文件長(zhǎng)度>][,F(xiàn)ILEROWTH=<文件增長(zhǎng)率>])[,…n]][FORRESTORE]9.3.1Transact-SQL的數(shù)據(jù)定義功能及實(shí)例 27編輯版ppptCreateDatabase學(xué)生選課on(Name=學(xué)生選課_DAT,FileName='d:\學(xué)生選課\學(xué)生選課_DAT.MDF',Size=2MB,FileGrowth=10%)Logon(Name=學(xué)生選課_LOG,FileName='d:\學(xué)生選課\學(xué)生選課_LOG.LDF',Size=1MB,FileGrowth=10%)例9.1創(chuàng)建一個(gè)學(xué)生選課數(shù)據(jù)庫28編輯版pppt數(shù)據(jù)庫的選擇使用USE命令,其格式為:USE<數(shù)據(jù)庫名>注意:在TransactSQL中沒有語法結(jié)束符號(hào)。語句結(jié)束后按<Enter>鍵,并另起一行輸入GO語句,再按<Enter>鍵。否則語句不會(huì)執(zhí)行。(2)選擇數(shù)據(jù)庫29編輯版pppt刪除數(shù)據(jù)庫的語法為:
DROPDATABASE<數(shù)據(jù)庫名1>[,...數(shù)據(jù)庫名n](3)刪除數(shù)據(jù)庫30編輯版pppt2.定義表定義基本表使用CREATETABLE命令,其功能是定義表名、列名、數(shù)據(jù)類型、初始值和步長(zhǎng)等,還包括定義表的完整性約束和缺省值。定義基本表的格式為:
CTEATETABLE<表名>(<列名><類型>|AS<表達(dá)式>[<字段級(jí)約束>][,……][<記錄級(jí)約束>])上述格式有以下問題需要說明。31編輯版pppt2.定義表上述格式有以下問題需要說明。(1)字段級(jí)約束字段級(jí)約束指只涉及到單個(gè)字段的約束,可以使用以下短語定義:1)[NOTNULL|NULL]:定義不允許或允許字段值為空。2)[PRIMATYKEYCLUSTERED|NONCLUSTERED]:定義該字段為主碼并建立聚集或非聚集索引。3)[REFERENCES<參照表>(<對(duì)應(yīng)字段>)]:定義該字段為外碼,并指出被參照表及對(duì)應(yīng)字段4)[DEFAULT<缺省值>]:定義字段的缺省值。5)[CHECK(<條件>)]:定義字段應(yīng)滿足的條件表達(dá)式。6)[IDENTITY(<初始值>,<步長(zhǎng)>)]:定義字段為數(shù)值型數(shù)據(jù),并指出它的初始值和逐步增加的步長(zhǎng)值。32編輯版pppt2.定義表(2)記錄級(jí)約束記錄級(jí)約束指涉及到表中多個(gè)字段的約束,其格式為:
CONSTRAINT<約束名><約束式>
約束式主要有以下幾種。
1)[PRIMARYKEY[CLUSTERED|NONCLUSTERED](<列名組>)]:定義表的主碼并建立主碼的聚集或非聚集索引。
2)[FOREIGNKEY(<外碼>)REFERENCES<參照表>(<對(duì)應(yīng)列>)]:指出表的外碼和被參照表。3)[CHECK(<條件表達(dá)式>)]:定義記錄應(yīng)滿足的條件。4)[UNIQUE(<列組>)]:定義不允許重復(fù)值的字段組。33編輯版pppt(1)修改基本表修改基本表是指修改列的數(shù)據(jù)類型、長(zhǎng)度、列的完整性約束、增加一個(gè)新列或刪除列,修改表還包括對(duì)修改記錄級(jí)完整性約束。修改表的語法可分為4種。1)修改字段的定義。修改字段的定義主要為修改字段寬度和字段約束,不能改動(dòng)字段名稱。修改字段的語法為:
ALTERTABLE<表名>ALTERCOLUMN<列名><新類型>[NULL|NOTNULL]<約束定義>3.基本表的維護(hù)34編輯版pppt2)增加字段和表約束規(guī)則。增加字段和表約束規(guī)則的格式為:
ALTERTABLE<表名>ADD{<列定義>|[<表約束定義>]}….3)刪除字段或約束規(guī)則。刪除字段或表級(jí)約束規(guī)則的格式為:
ALTERTABLE<表名>DROP{[CONSTRAINT]<約束名>|COLUMN<列名>}4)使約束有效或無效。使原表定義的約束暫時(shí)有效或無效的格式為:
ALTERTABLE<表名>{CHECK|NOCHECK}CONSTRAINT{ALL|<約束名組>}其中:CHECK為使約束有效,NOCHECK為使約束無效;ALL指全部約束。(2)刪除基本表刪除基本表的語法為:
DROPTABLE<表名>3.基本表的維護(hù)35編輯版pppt數(shù)據(jù)操縱語句主要包括SELECT(查詢)、INSERT(插入)、UPDATE(修改)和DELETE(刪除)4種語句。Transact-SQL對(duì)SQL-92的數(shù)據(jù)操縱語句細(xì)節(jié)作了改進(jìn),使之功能更強(qiáng)大,使用更方便。本節(jié)對(duì)其擴(kuò)展部分著重講述。9.3.2Transact-SQL的數(shù)據(jù)操縱功能及實(shí)例36編輯版pppt1.數(shù)據(jù)檢索語句的語句格式在SQL-92中,組成SELECT語句的子句有SELECT、FROM、WHERE、GROUPBY和ORDERBY,其作用分別是指定列、表、元組條件、分組條件和排序要求。Transact-SQL語句則有更多的子句,其語法為:
SELECT<查詢列>[INTO<新表名>][FROM<數(shù)據(jù)源>][WHERE<元組條件表達(dá)式>][GROUPBY<分組條件>][HAVING<組選擇條件>][ORDERBY<排序條件>][COMPUTE<統(tǒng)計(jì)列組>][BY<表達(dá)式>]9.3.2Transact-SQL的數(shù)據(jù)操縱功能及實(shí)例37編輯版pppt下面以子句為例,對(duì)上述語句進(jìn)行解釋。(1)SELECT子句SELECT子句的功能是確定結(jié)果列。SELECT子句的語法為:
SELECT[ALL|DISTINCT][TOP<數(shù)值>[PERCENT]]<查詢列組>其中的查詢列可以表示為:
<查詢列>::=*|<表或視圖>.*|<列名或表達(dá)式>[AS]<列別名>|<列別名>=<表達(dá)式>上述SELECT子句語法中:1)ALL|DISTINCT選項(xiàng):ALL為返回結(jié)果集中的所有行;DISTINCT為僅顯示結(jié)果集中的唯一行。該項(xiàng)不選時(shí),ALL是缺省值。9.3.2Transact-SQL的數(shù)據(jù)操縱功能及實(shí)例38編輯版pppt2)TOP<數(shù)值>選項(xiàng):僅返回結(jié)果集中的前<數(shù)值>行。如果有[PERCENT],則返回結(jié)果集中的百分之<數(shù)值>行記錄。3)“*”:指明返回在FROM子句中包括的表和視圖的全部列。4)<表或視圖>.*:指明返回指定表或視圖的全部列。5)<表達(dá)式>:結(jié)果列表達(dá)式可以是一個(gè)由列名、常量、函數(shù),通過操作符(或者子查詢)連接起來的數(shù)據(jù)表達(dá)式。6)<列別名>:用來代替出現(xiàn)在結(jié)果集中的列名或表達(dá)式,別名可以在ORDERBY子句中出現(xiàn),但不能在WHERE、GROUPBY或HAVING子句中出現(xiàn)。9.3.2Transact-SQL的數(shù)據(jù)操縱功能及實(shí)例39編輯版pppt(2)INTO子句INTO子句用于創(chuàng)建一個(gè)表,并將查詢結(jié)果添加到該表中。INTO不能與COMPUTE子句同時(shí)使用。如果創(chuàng)建的是臨時(shí)表,則在表名前加“#”字符。(3)FROM子句FORM子句用于指定查詢的數(shù)據(jù)源表,F(xiàn)ROM子句一般為必選子句,其語法格式為:
FROM<數(shù)據(jù)源組>9.3.2Transact-SQL的數(shù)據(jù)操縱功能及實(shí)例40編輯版pppt數(shù)據(jù)源的語法為:
<數(shù)據(jù)源>::=<表名>[[AS]<表別名>][WITH(<表線索組>)]|<視圖名>[[AS]<視圖別名>]|<行集合函數(shù)>[[AS]<別名>]|<嵌套SELECT語句>[[AS]<別名>]|<連接表>上面的語法中,數(shù)據(jù)源包括表、視圖、行集合函數(shù)表示的數(shù)據(jù)集合、嵌套的SELECT語句表示的結(jié)果集以及數(shù)據(jù)連接表的結(jié)果集。連接表的語法為:
<連接表>::=<數(shù)據(jù)源><連接類型><數(shù)據(jù)源>ON<連接條件>|<數(shù)據(jù)源>CROSSJOIN<數(shù)據(jù)源>|<連接表><連接類型>::=[INNER|{{LEFT|RIGHT|FULL}[OUTER]}]JOIN9.3.2Transact-SQL的數(shù)據(jù)操縱功能及實(shí)例41編輯版pppt其中:1)INNER為內(nèi)連接,它返回所有連接匹配的行。內(nèi)連接是連接類型的缺省值。2)LEFT[OUTER]為左外連接。左外連接的結(jié)果集中不但包括了內(nèi)連接返回的行,而且還包括了左邊表中不滿足連接條件的行。那些不滿足連接條件的行所對(duì)應(yīng)的右邊表的列將會(huì)顯示NULL值。3)RIGHT[OUTER]為右外連接。右外連接的結(jié)果集中不但包括內(nèi)連接返回的行,而且還包括右邊表中不滿足連接條件的行。那些不滿足連接條件的行所對(duì)應(yīng)的左邊表的列將會(huì)顯示NULL值。4)FULL[OUTER]為完全外連接。完全外連接的結(jié)果集中不但包括了內(nèi)連接返回的行,同時(shí)也包括左邊表和右邊表中的所有不滿足條件的行,但是與其對(duì)應(yīng)的右邊表或左邊表的列將會(huì)顯示NULL值。9.3.2Transact-SQL的數(shù)據(jù)操縱功能及實(shí)例42編輯版pppt5)ON<連接條件>用于指定連接條件。連接條件表達(dá)式為:
<列名><比較符><列名>條件表達(dá)式中的兩個(gè)列名并不一定是相同的名字或具有相同的數(shù)據(jù)類型,但是兩者必須是相兼容的或者SQLServer可以對(duì)它們做隱式轉(zhuǎn)換的。如果它們不可以進(jìn)行隱式轉(zhuǎn)換,則必須使用專門的函數(shù)(如CAST函數(shù))進(jìn)行顯式轉(zhuǎn)換。6)CROSSJOIN為交叉連接,即對(duì)兩個(gè)表進(jìn)行笛卡兒積運(yùn)算。其結(jié)果是返回兩個(gè)表的交叉匹配結(jié)果。交叉連接也可以通過在FROM子句中指定連接表而在WHERE子句中不指明連接條件來表達(dá)。9.3.2Transact-SQL的數(shù)據(jù)操縱功能及實(shí)例43編輯版pppt(4)WHERE子句WHERE子句用于指定查詢條件以及數(shù)據(jù)連接條件。WHERE子句的語法為:
WHERE<查詢條件>|<舊格式外連接理?xiàng)l件><舊格式外連接條件>::=<列名>{*=|=*}<列名>雖然舊格式的外連接條件也可以表示表間的左連接(*=)或右連接(=*),但由于這種表示存在二義性,所以外連接最好通過FROM子句表示。9.3.2Transact-SQL的數(shù)據(jù)操縱功能及實(shí)例44編輯版pppt(5)GROUPBY子句GROUPBY子句用于對(duì)結(jié)果集分組。分組會(huì)影響到統(tǒng)計(jì)函數(shù)的結(jié)果:如果有GROUPBY子句,則按組進(jìn)行數(shù)據(jù)統(tǒng)計(jì);否則,對(duì)全部數(shù)據(jù)統(tǒng)計(jì)。GROUPBY的語法為:
GROUPBY[ALL]<分組表達(dá)式組>其中:1)ALL為在結(jié)果集中包括所有的組,其中包括一組不滿足WHERE子句指定條件的記錄。這個(gè)由不滿足條件的元組構(gòu)成的組,其總和將返回一個(gè)空值。2)分組表達(dá)式是分組所基于的表達(dá)式,該表達(dá)式一般為列名。SELECT語句可以有多個(gè)分組表達(dá)式。9.3.2Transact-SQL的數(shù)據(jù)操縱功能及實(shí)例45編輯版pppt(6)HAVING子句HAVING子句用于指定分組或匯總篩選條件,HAVING子句的格式為:
HAVING<分組或匯總篩選條件>(7)ORDERBYORDERBY子句用于指明排序項(xiàng)和排序要求,其語法為:
ORDERBY<排序項(xiàng)>[ASC|DESC][,…n](8)COMPUTE子句COMPUTE子句的作用是產(chǎn)生匯總值,并在結(jié)果集后將匯總值放入摘要列,COMPUTE與BY配合,將起到換行控制和分段小計(jì)的作用。COMPUTE子句的語法如下:
COMPUTE<統(tǒng)計(jì)函數(shù)組>[BY<分組項(xiàng)>]其中:BY<分組項(xiàng)>表示在結(jié)果集中產(chǎn)生換行控制及分段小計(jì)。COMPUTEBY必須和ORDERBY配合使用,分組項(xiàng)應(yīng)完全等于排序項(xiàng)。9.3.2Transact-SQL的數(shù)據(jù)操縱功能及實(shí)例46編輯版pppt查詢語句中使用的運(yùn)算符號(hào)Transact-SQL的查詢語句中使用的運(yùn)算符,如表9.4所示。9.3.2Transact-SQL的數(shù)據(jù)操縱功能及實(shí)例類別符號(hào)算術(shù)運(yùn)算符+(加),—(減),*(乘),/(除),%(取余或模)比較運(yùn)算符=(等于),>(大于),<(小于),>=(大于等于或不小于),!<(不小于),<=(小于等于或不大于),!>(不小于),<>(不等于),!=(不等于)范圍運(yùn)算符BETWEEN…AND….(在….之間),NOTBETWEEN….AND….(不在….之間)子查詢運(yùn)算符IN(在…之中),NOTIN(不在…之中),<比較符>ALL(全部),<比較符>ANY(任一),<比較符>SOME(一些),EXISTS(存在),NOTEXISTS(不存在)字符串查詢符+(連接),LIKE(匹配),NOTLIKE(匹配)未知值運(yùn)算符ISNULL(是空值),NOTISNULL(不是空值)邏輯運(yùn)算符NOT(非),AND(與),OR(或)組合運(yùn)算符UNION(并),NUIONALL(并,允許重復(fù)的元組)47編輯版ppptLIKE是字符模式匹配操作符。LIKE操作符使用的通配符如表9.5所示。
9.3.2Transact-SQL的數(shù)據(jù)操縱功能及實(shí)例通配符描述示例%包含零個(gè)或更多字符的任意字符串。WHEREtitleLIKE'%computer%'將查找處于書名任意位置的包含單詞computer的所有書名。_(下劃線)任何單個(gè)字符。WHEREau_fnameLIKE'_ean'將查找以ean結(jié)尾的所有4個(gè)字母的名字(Dean、Sean等)。[<字符范圍>]指定字符范圍([a-f])或集合([abcdef])中的任何單個(gè)字符。WHEREau_lnameLIKE'[C-P]arsen'將查找以arsen結(jié)尾且以介于C與P之間的任何單個(gè)字符開始的作者姓氏,例如,Carsen、Larsen、Karsen等。[^<字符范圍>]不屬于指定范圍([a-f])或集合([abcdef])的任何單個(gè)字符。WHEREau_lnameLIKE'de[^l]%'將查找以de開始且其后的字母不為l的所有作者的姓氏。48編輯版pppt在Transact-SQL還提供了一些常用函數(shù)以供表達(dá)式使用,見表9.6所示。9.3.2Transact-SQL的數(shù)據(jù)操縱功能及實(shí)例函數(shù)參數(shù)意義AVG([ALL|DISTINCT]<數(shù)值表達(dá)式>)求數(shù)值表達(dá)式的值,可以針對(duì)全部值或不重復(fù)值兩種情況COUNT([ALL|DISTINCT]<表達(dá)式>)統(tǒng)計(jì)表達(dá)式的值,可以針對(duì)全部值或不重復(fù)值兩種情況COUNT(*)統(tǒng)計(jì)記錄數(shù)MAX(<表達(dá)式>)求表達(dá)式的最大值MIN(<表達(dá)式>)求表達(dá)式的最小值SUM([ALL|DISTINCT]<算術(shù)表達(dá)式>)求算術(shù)表達(dá)式的和,可有針對(duì)全部值或不重復(fù)值兩種情況STDEV(<算術(shù)表達(dá)式>)求表中所有值的標(biāo)準(zhǔn)偏差STDEVP(<算術(shù)表達(dá)式>)求所有涉及數(shù)值的標(biāo)準(zhǔn)偏差VAR(<算術(shù)表達(dá)式>)求表中所有值的方差VARP(<算術(shù)表達(dá)式>)求所涉及數(shù)值的方差49編輯版pppt例9.2在學(xué)生選課數(shù)據(jù)庫中定義學(xué)生表Suse學(xué)生選課--如果在sysobjects表中存在S表的定義,則首先進(jìn)行刪除處理if(selectcount(*)fromsysobjectswherename='S'andXtype='U')>0 droptable[dbo].[s]GOCREATETABLEs( snumchar(7)primarykey, snamechar(8)NOTNULL, ssexchar(2)default'男'check(ssexin('男','女')), sbirthdatetime, sphonechar(10), dnumchar(7))go50編輯版ppptselect*intoS_1fromSwhereSSex='女'go例9.3選擇出S表中的女同學(xué),并存入到S_1表中51編輯版pppt例9.4在SC表中使用Compute……By子句selectSnum,ScorefromSCorderbySnumcomputeAVG(Score)bySnum52編輯版pppt9.3.3
注釋符與運(yùn)算符注釋是程序代碼中不執(zhí)行的文本字符串(也稱為注釋)。在SQLServer中,可以使用兩種類型的注釋字符:ANSI標(biāo)準(zhǔn)的注釋符“--”用于單行注釋。與C語言相同的程序注釋符號(hào),即“/*……*/”,“/*”用于注釋文字的開頭,“*/”用于注釋文字的結(jié)尾,可在程序中標(biāo)識(shí)多行文字為注釋。例如:--單行注釋/*多行注釋
@SnumVARCHAR(4):存放學(xué)號(hào)
@SnumVARCHAR(4):存放姓名*/運(yùn)算符是在關(guān)系的屬性或變量之間進(jìn)行各種運(yùn)算的符號(hào),包括算術(shù)運(yùn)算符、位運(yùn)算符、比較運(yùn)算符、邏輯運(yùn)算符等,另外,SQLServer使用算術(shù)運(yùn)算符加(+)作字符串的連接運(yùn)算。53編輯版pppt變量是一種語言中必不可少的組成部分。Transact-SQL語言中有兩種形式的變量:一種是用戶自己定義的局部變量;另外一種是系統(tǒng)提供的全局變量。局部變量局部變量被引用時(shí)要在其名稱前加上標(biāo)志“@”,而且必須先用DECLARE命令定義后才可以使用。其說明形式如下:DECLARE@變量名變量類型[,@變量名變量類型…]9.3.4
變量54編輯版pppt同時(shí),在Transact-SQL中不能像在一般的程序語言中一樣使用“變量=變量值”來給變量賦值,必須使用SELECT或SET命令來設(shè)定變量的值。其語法如下:SELECT@局部變量1=變量值1[,……,@局部變量n=變量值n]SET@局部變量=變量值例9.5聲明一個(gè)長(zhǎng)度為4個(gè)字符的變量Snum,并賦值一個(gè)學(xué)號(hào)“S003”。解:declare@Snumchar(4)--存放學(xué)號(hào)
select@Snum=‘S003’--賦值9.3.4
變量55編輯版pppt全局變量全局變量是SQLServer系統(tǒng)內(nèi)部使用的變量,其作用范圍并不僅僅局限于某一程序,而是任何程序均可以隨時(shí)調(diào)用。全局變量通常存儲(chǔ)一些SQLServer的配置設(shè)定值和統(tǒng)計(jì)數(shù)據(jù)。用戶可以在程序中用全局變量來測(cè)試系統(tǒng)的設(shè)定值或者是Transact-SQL命令執(zhí)行后的狀態(tài)值。全局變量不是由用戶的程序定義的,它們是在服務(wù)器級(jí)定義的,只能使用預(yù)先說明及定義的全局變量。局部變量的名稱不能與全局變量的名稱相同,否則會(huì)在應(yīng)用中出錯(cuò)。引用全局變量時(shí)必須以“@@”開頭。例9.6輸出當(dāng)前版本信息。解:print@@version--輸出當(dāng)前版本信息9.3.4
變量56編輯版pppt9.3.5
流程控制語句流程控制語句是指那些用來控制程序執(zhí)行和流程分支的命令,在SQLServer2000中,流程控制語句主要用來控制SQL語句、語句塊或者存儲(chǔ)過程的執(zhí)行流程。Transact-SQL語言使用的流程控制命令與常見的程序設(shè)計(jì)語言類似,主要有以下幾種控制命令。BEGIN…ENDBEGIN…END語句能夠?qū)⒍鄠€(gè)Transact-SQL語句組合成一個(gè)語句塊,并將在BEGIN…END內(nèi)的所有程序視為一個(gè)單元處理。在條件語句(如IF…ELSE)和循環(huán)等控制流程語句中,當(dāng)符合特定條件便要執(zhí)行兩個(gè)或者多個(gè)語句時(shí),就需要使用BEGIN…END語句,其語法形式為:BEGIN<命令行或程序塊>END在BEGIN…END中可嵌套另外的BEGIN…END來定義另一程序塊。57編輯版ppptBegin…end說明一個(gè)語句塊循環(huán)語句whiledeclare@positionint,@stringvarchar(8)set@position=1set@string='china'while@position<=datalength(@string)beginselectascii(substring(@string,@position,1)),char(ascii(substring(@string,@position,1)))set@position=@position+1end58編輯版pppt9.3.5
流程控制語句IF…ELSEIF…ELSE語句是條件判斷語句。IF…ELSE語句用來判斷當(dāng)某一條件成立時(shí)執(zhí)行某段程序,條件不成立時(shí)執(zhí)行另一段程序。其語法如下:IF<條件表達(dá)式><命令行或程序塊>[ELSE[條件表達(dá)式]<命令行或程序塊>]其中,<條件表達(dá)式>可以是各種表達(dá)式的組合,但表達(dá)式的值必須是邏輯值“真”或“假”;ELSE子句是可選的,最簡(jiǎn)單的IF語句沒有ELSE子句部分。IF…ELSE可以進(jìn)行嵌套,在Transact-SQL中最多可嵌套32級(jí)。59編輯版pppt9.3.5
流程控制語句例9.7從SC(選修表)中求出學(xué)號(hào)為“S030101”的同學(xué)的平均成績(jī),如果此平均成績(jī)大于或等于90分,則輸出“優(yōu)秀”字樣。解:IF(selectavg(Score)fromSCwhereSnum=’S030101’groupbySnum)>=90BEGINprint’優(yōu)秀’END60編輯版pppt9.3.5
流程控制語句CASECASE命令有兩種語句格式:(1)CASE<運(yùn)算式>WHEN<運(yùn)算式>THEN<運(yùn)算式>…WHEN<運(yùn)算式>THEN<運(yùn)算式>[ELSE<運(yùn)算式>]END該語句的執(zhí)行過程是:將CASE后面表達(dá)式的值與各WHEN子句中的表達(dá)式的值進(jìn)行比較,如果二者相等,則返回THEN后的表達(dá)式的值,然后跳出CASE語句,否則返回ELSE子句中的表達(dá)式的值。ELSE子句是可選項(xiàng)。當(dāng)CASE語句中不包含ELSE子句時(shí),如果所有比較失敗時(shí),CASE語句將返回NULL。61編輯版pppt9.3.5
流程控制語句例9.8從學(xué)生表S中,選取Snum,Ssex,如果Ssex為“男”則顯示“M”,如果為“女”,顯示“F”。解:SELECTSnum,CASESsexWHEN'男'THEN'M'WHEN'女'THEN'F'ENDAS'性別'FROMS62編輯版pppt9.3.5
流程控制語句(2)CASEWHEN<條件表達(dá)式>THEN<運(yùn)算式>…WHEN<條件表達(dá)式>THEN<運(yùn)算式>[ELSE<運(yùn)算式>]END該語句的執(zhí)行過程是:首先測(cè)試WHEN后的表達(dá)式的值。如果其值為真,則返回THEN后面的表達(dá)式的值,否則測(cè)試下一個(gè)WHEN子句中的表達(dá)式的值。如果所有WHEN子句后的表達(dá)式的值都為假,則返回ELSE后的表達(dá)式的值,此時(shí),如果在CASE語句中沒有ELSE子句,則CASE表達(dá)式返回NULL。63編輯版pppt9.3.5
流程控制語句例9.9從SC表中查詢所有同學(xué)選課成績(jī)情況,將百分制轉(zhuǎn)換為等級(jí)制;凡成績(jī)?yōu)榭照唢@示“未考”、小于60分顯示“不及格”、60分至70分顯示“及格”、70分至80分顯示“中等”、80分至90分顯示“良好”、大于或等于90分時(shí)顯示“優(yōu)秀”。解SELECTSnum,Cnum,CASEWHENScoreISNULLTHEN'未考'WHENScore<60THEN'不及格'WHENScore>=60ANDSCORE<70THEN'及格'WHENScore>=70ANDSCORE<80THEN'中等'WHENScore>=80ANDSCORE<90THEN'良好'WHENScore>=90THEN'優(yōu)秀'ENDAS'等級(jí)'FROMSC64編輯版pppt在Transact-SQL語言中,函數(shù)被用來執(zhí)行一些特殊的運(yùn)算以支持SQLServer的標(biāo)準(zhǔn)命令,可分為三種:可以像SQL語句中表引用一樣使用的行集函數(shù);對(duì)一組值操作,返回單一的匯總值的集合函數(shù);對(duì)單一值操作,返回單一值的標(biāo)量函數(shù)。表9.8列出了標(biāo)量函數(shù)的分類。9.3.7函數(shù)65編輯版pppt9.3.7函數(shù)函數(shù)分類解釋配置函數(shù)游標(biāo)函數(shù)日期和時(shí)間函數(shù)數(shù)學(xué)函數(shù)元數(shù)據(jù)函數(shù)安全函數(shù)字符串函數(shù)系統(tǒng)函數(shù)系統(tǒng)統(tǒng)計(jì)函數(shù)文本和圖象函數(shù)返回當(dāng)前配置信息返回游標(biāo)信息對(duì)日期和時(shí)間輸入值執(zhí)行操作,返回一個(gè)字符串、數(shù)字或日期和時(shí)間值作為函數(shù)參數(shù)提供的輸入值執(zhí)行計(jì)算,返回一個(gè)數(shù)字值返回有關(guān)數(shù)據(jù)庫和數(shù)據(jù)庫對(duì)象的信息返回有關(guān)用戶和角色的信息對(duì)字符串輸入值執(zhí)行操作,返回一個(gè)字條串或數(shù)字值執(zhí)行操作并返回有關(guān)MicrosoftSQLServer中的值、對(duì)象和設(shè)置的信息返回系統(tǒng)的統(tǒng)計(jì)信息對(duì)文本或圖象輸入值或列執(zhí)行操作,返回有關(guān)這些值的信息66編輯版pppt在9.2.2節(jié)中,我們已經(jīng)對(duì)存儲(chǔ)過程做了簡(jiǎn)單介紹。本節(jié)將深入討論存儲(chǔ)過程的創(chuàng)建、管理等內(nèi)容。9.4.1存儲(chǔ)過程的類型存儲(chǔ)過程有3種類型:系統(tǒng)存儲(chǔ)過程、用戶定義存儲(chǔ)過程和擴(kuò)展存儲(chǔ)過程。9.4存儲(chǔ)過程67編輯版pppt語法Createprocedure<過程名>[;<版本號(hào)>][@<參數(shù)名><參數(shù)類型>[=<缺省值>][output]…][withrecompile|encryption|recompile,encryption]As<SQL語句組>參數(shù)含義
過程名:局部臨時(shí)過程前加#;全局臨時(shí)過程前加##
版本號(hào):區(qū)分同名的存儲(chǔ)過程,定義存儲(chǔ)過程組的目的是以便用一條DROPPROCEDURE語句刪除一組存儲(chǔ)過程。Output:指定參數(shù)從存儲(chǔ)過程返回的信息。Recompile:每次運(yùn)行該過程時(shí),將對(duì)其重新編譯Encrypiton:語句在syscomments表中加密存儲(chǔ)9.4.2創(chuàng)建存儲(chǔ)過程68編輯版pppt調(diào)用Exec[ute]<過程名>[[@<參數(shù)名>=]<參數(shù)>…[<版本號(hào)>]刪除Dropprocedure<存儲(chǔ)過程名組>9.4.3執(zhí)行存儲(chǔ)過程69編輯版pppt1.創(chuàng)建簡(jiǎn)單的存儲(chǔ)過程例9.11創(chuàng)建一個(gè)存儲(chǔ)過程,從學(xué)生選課數(shù)據(jù)庫中查詢學(xué)號(hào),姓名,課程名和成績(jī)Use學(xué)生選課9.4.4存儲(chǔ)過程實(shí)例70編輯版ppptIFEXISTS(SELECT*FROMSYSobjectsWHEREname='proc_AllStudents'ANDtype='p')/*如果在系統(tǒng)表SYSobjects中存在存儲(chǔ)過程proc_AllStudents則刪除它*/DROPPROCEDUREproc_AllStudentsGOCREATEPROCEDUREproc_AllStudentsASSELECTs.snum,sname,cname,scorefroms,sc,cWheres.snum=sc.snumandum=umGO執(zhí)行以上創(chuàng)建的存儲(chǔ)過程:execproc_AllStudents9.4.4存儲(chǔ)過程實(shí)例71編輯版pppt2.創(chuàng)建帶輸入?yún)?shù)的存儲(chǔ)過程例9.12創(chuàng)建一個(gè)存儲(chǔ)過程,完成向課程表(C)中插入一條記錄,記錄值為(’c07’,’java語言’,2),記錄值通過輸入?yún)?shù)傳遞到存儲(chǔ)過程中。9.4.4存儲(chǔ)過程實(shí)例72編輯版ppptIFEXISTS(SELECT*FROMSYSobjectsWHEREname='proc_Insert_C'ANDtype='p')/*如果在系統(tǒng)表SYSobjects中存在存儲(chǔ)過程proc_AllStudents則刪除它*/DROPPROCEDUREproc_Insert_CGOCREATEPROCEDUREproc_Insert_C(@Cnumchar(7),@Cnamechar(10),@Cfreqsmallint)asinsertintoC(Cnum,Cname,Cfreq)values(@Cnum,@Cname,@Cfreq)Go執(zhí)行以上創(chuàng)建的存儲(chǔ)過程:execproc_Insert_C@Cnum='c01',@Cname='java語言',@Cfreq=29.4.4存儲(chǔ)過程實(shí)例73編輯版pppt3.創(chuàng)建帶返回參數(shù)的存儲(chǔ)過程在SQLServer2000中,從存儲(chǔ)過程中返回?cái)?shù)據(jù)主要有以下4種形式。輸出參數(shù),即OUTPUT參數(shù)。OUTPUT參數(shù)用來表明參數(shù)是返回參數(shù),該參數(shù)值可以返回給EXECUTE。返回代碼,即RETURN語句,它始終是整型值。SELECT語句的結(jié)果集??梢詮拇鎯?chǔ)過程外引用的全局游標(biāo)返回?cái)?shù)據(jù)。本例演示使用OUTPUT參數(shù)從存儲(chǔ)過程返回?cái)?shù)據(jù)。該存儲(chǔ)過程既有輸入?yún)?shù),也有輸出參數(shù)例9.13創(chuàng)建一個(gè)存儲(chǔ)過程,該存儲(chǔ)過程接受外部傳入的Snum,在SC表中查找該Snum的選課記錄,然后輸出該學(xué)生所選課程的總成績(jī)。9.4.4存儲(chǔ)過程實(shí)例74編輯版ppptUSE學(xué)生選課goIFEXISTS(SELECT*FROMSYSobjectsWHEREname='proc_Search_sumScore'ANDtype='p')DROPPROCEDUREproc_Search_sumScoreGOCREATEPROCEDUREproc_Search_sumScore(@Snumchar(7),@sumScorefloatoutput)asselect@sumScore=sum(Score)fromSCwhereSnum=@Snumgo執(zhí)行以上創(chuàng)建的存儲(chǔ)過程:declare@sumScorefloatexecproc_Search_sumScore'S030101',@sumScoreoutputprint@sumScorego9.4.4存儲(chǔ)過程實(shí)例75編輯版ppptcreateprocprocs3(@snumchar(8),@avgscorefloatoutput)asselect@avgscore=avg(score)fromscwheresnum=@snumgo76編輯版ppptdeclare@avgscorefloatexecprocs3's030101',@avgscoreoutputprint@avgscore77編輯版pppt觸發(fā)器是近年來在關(guān)系數(shù)據(jù)庫管理系統(tǒng)中應(yīng)用得比較多的一種完整性保護(hù)措施,其功能一般比完整性約束要強(qiáng)得多。一般而言,在完整性約束功能中,當(dāng)系統(tǒng)檢查出數(shù)據(jù)中有違反完整性約束條件時(shí),僅給出必要提示以通知用戶。而數(shù)據(jù)庫觸發(fā)器(DatabaseTriggers)是響應(yīng)插入、更新或刪除數(shù)據(jù)庫事件而執(zhí)行的過程,可用于管理復(fù)雜的完整性約束,或監(jiān)控對(duì)關(guān)系的修改,或通知其他程序關(guān)系已發(fā)生修改。8.5觸發(fā)器78編輯版pppt9.5.
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030年中國鋰電池正極材料市場(chǎng)發(fā)展趨勢(shì)及投資戰(zhàn)略研究報(bào)告
- 2025-2030年中國鋁冶煉行業(yè)運(yùn)行動(dòng)態(tài)與前景趨勢(shì)分析報(bào)告
- 2025-2030年中國菱鎂礦產(chǎn)業(yè)競(jìng)爭(zhēng)格局與十三五規(guī)劃研究報(bào)告
- 2025-2030年中國聯(lián)苯雙酯行業(yè)市場(chǎng)運(yùn)行狀況與十三五規(guī)劃分析報(bào)告
- 2025-2030年中國粘玉米行業(yè)規(guī)模分析及發(fā)展建議研究報(bào)告
- 2025-2030年中國空管系統(tǒng)市場(chǎng)十三五規(guī)劃與投資戰(zhàn)略研究報(bào)告
- 2025-2030年中國畜禽養(yǎng)殖中抗生素行業(yè)發(fā)展?fàn)顩r及投資戰(zhàn)略研究報(bào)告
- 東北財(cái)經(jīng)大學(xué)《中醫(yī)護(hù)理學(xué)基礎(chǔ)》2023-2024學(xué)年第二學(xué)期期末試卷
- 廣東江門幼兒師范高等專科學(xué)?!睹嫦?qū)ο笈c可視化編程》2023-2024學(xué)年第二學(xué)期期末試卷
- 廣州工商學(xué)院《健康服務(wù)與營銷學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 酒店賓客意見表
- 一年級(jí)語文《端午粽》說課課件
- NB/T 11261-2023煤礦凍結(jié)孔施工及質(zhì)量驗(yàn)收規(guī)范
- 《鑄造用增碳劑》
- 嬰幼兒傷害預(yù)防與處理配套教材電子課件(完整版)
- 線下庭審申請(qǐng)書
- 萃取技術(shù) 多級(jí)逆流萃取
- 部編版小學(xué)五年級(jí)語文教材培訓(xùn)課件【部編】
- 盆景造型經(jīng)驗(yàn)
- 2023年廣東省佛山市順德區(qū)小升初數(shù)學(xué)試卷(含答案)
- 威風(fēng)堂堂進(jìn)行曲
評(píng)論
0/150
提交評(píng)論