第一篇:數據庫原理實驗報告
南 京 曉 莊 學 院
《數據庫原理與應用》
課程實驗報告
實驗一 SQL Server 2005常用服務與實用工具實驗
所在院(系): 數學與信息技術學院 班級:
學號:
姓名:
1.實驗目的
(1)了解Microsoft 關系數據庫管理系統SQL Server的發展歷史及其特性。(2)了解SQL Server 2005的主要組件、常用服務和系統配置。
(3)掌握Microsoft SQL Server Management Studio 圖形環境的基本操作方法。了解使用“SQL Server 2005 聯機從書”獲取幫助信息的方法;了解“查詢編輯器”的使用方法;了解模板的使用方法。
2.實驗要求
(1)收集整理Microsoft關系數據庫管理系統SQL Server的相關資料,總結其發展歷史及SQL Server 2005主要版本類別和主要功能特性。
(2)使用SQL Server配置管理器查看和管理SQL Server 2005服務。
(3)使用Microsoft SQL Server Management Studio連接數據庫;使用SQL Server幫助系統獲得所感興趣的相關產品主題/技術文檔。
(4)使用Microsoft SQL Server Management Studio“查詢編輯器”編輯并執行Transact-SQL查詢語句。
(5)查看Microsoft SQL Server 2005模板,了解模板的使用方法。(6)按要求完成實驗報告。
3.實驗步驟、結果和總結實驗步驟/結果
(1)簡要總結SQL Server系統發展歷史及SQL Server 2005主要版本類別與主要功能特性。
(2)總結SQL Server Management Studio的主要操作方法。
(3)總結查詢編輯器的功能和主要操作方法,并舉例說明。
(4)總結“模板”的使用方法,并舉例說明。
4.實驗思考:
查詢相關資料,簡要描述SQL Server 2005的主要服務。
第二篇:數據庫原理實驗報告
南 京 曉 莊 學 院
《數據庫原理與應用》
課程實驗報告
實驗二 數據庫的創建、管理、備份及還原實驗
所在院(系): 數學與信息技術學院 班級:
學號:
姓名:
1.實驗目的
(1)掌握分別使用SQL Server Management Studio圖形界面和Transact-SQL語句創建和修改數據庫的基本方法;
(2)學習使用SQL Server查詢分析窗口接收Transact-SQL語句和進行結果分析。
(3)了解SQL Server的數據庫備份和恢復機制,掌握SQL Server中數據庫備份與還原的方法。
2.實驗要求
(1)使用SQL Server Management Studio創建“教學管理”數據庫。
(2)使用SQL Server Management Studio修改和刪除“教學管理”數據庫。(3)使用Transact-SQL語句創建“教學管理”數據庫。
(4)使用Transact-SQL語句修改和刪除“教學管理”數據庫。(5)使用SQL Server Management Studio創建“備份設備”;使用SQL Server Management Studio對數據庫“教學管理”進行備份和還原。(6)SQL Server 2005數據庫文件的分離與附加。(7)按要求完成實驗報告
3.實驗步驟、結果和總結實驗步驟/結果
(1)總結使用SQL Server Management Studio創建、修改和冊除“TM”(教學管理)數據庫的過程。
一、使用SQL Server Management Studio創建數據庫的步驟如下:
a.在磁盤上新建一個目錄,如在C:盤中新建“MyDB“目錄
b.在wimdows系統“開始“菜單中,依次選取”程序->Microsoft SQL Server 2005->SQL Management Studio” ,打開SQL Server Management Studio并連接到SQL Server 2005服務。
c.在“對象資源管理器“中單擊SQL Server服務器前面的“+”號或直接雙擊數據庫名稱,展開該服務器對象資源樹形結構,然后右鍵點擊“數據庫”文件夾,在彈出的快捷菜單上選擇“新建數據庫”選項
d.在打開的“新建數據庫”對話窗口中輸入數據庫名稱“教學管理”,在該窗口中“數據庫文件”設置部分可以修改數據文件和日志文件的文件名、初始大小、保存路徑等。
e.單擊“確定”按鈕,創建“教學管理”數據庫。
二、使用SQL Server Management Studio修改和刪除“教學管理”數據庫
1、使用SQL Server Management Studio圖形界面直接修改“教學管理”數據庫名為“TM”
2、使用SQL Server Management Studio圖形界面查看和修改數據庫屬性 a.在快捷菜單中選擇“屬性”項進入
使用
3.使用SQL Server Management Studio圖形界面刪除數據庫 在第一幅圖中的快捷菜單中選擇“刪除”項
(2)總結在實驗中為創建、修改和刪除“教學管理”數據庫所編寫的各條T-SQL語句及其完成了什么功能。
1、創建:
CREATE DATABASE 教學管理 ON PRIMARY(Name=JXGL, FileName='C:MyDBJXGL_Data.mdf', Size=3MB, MaxSize=100MB, filegrowth=1MB)LOG ON(Name=JXGL_Log, FileName='C:MyDBJXGL_Log.ldf', Size=1MB, MaxSize=UNLIMITED, FileGrowth=10%);點擊執行
2、使用Transact-SQL語句修改和刪除“教學管理”數據庫
增加數據文件。例如,在數據庫“教學管理”中增加數據文件JXGL_EXT,需要在數據庫查詢編輯器中輸入代碼:
在增加數據文件之前,要先獲得修改權限,即alter database數據庫句法,然后再添加數據文件。具體參數也有5項,與創建數據文件相同,在添加數據文件項中,name項是必不可少的。
編寫T—SQL語句,刪除“教學管理”數據庫中的數據文件或日志文件,注意不能刪除非空文件。如刪除剛添加到數據庫中的數據文件“jxgl_ext1” 實例代碼如下: ALTER DATABASE 教學管理
REMOVEFILE jxgl_ex1——刪除數據庫文件時應指定其邏輯名稱
SQL語句刪除數據庫?刪除了數據庫“教學管理” drop database 教學管理
檢查所輸入SQL語句有無語法錯,確認正確后, 按F5鍵或單擊“執行”按鈕,這樣就刪除了數據庫“教學管理”。
(3)總結使用SQL Server Management Studio備份與還原數據庫的幾種方法。
1、創建“備份設備”
2、對數據庫“TM”進行備份
1)打開 SQL Server Management Studio,右擊需要備份的數據庫,從彈出的快捷菜單中依次選擇【任務】--【備份】命令,打開【備份數據庫】對話框。如下圖所示:
(2)在【備份數據庫】對話框的【常規】頁面中根據需要選擇需要備份的【數據庫】,在本示例選擇備份數據庫.接下來還可以選擇【備份類型】、備份集的名稱等相關參數。默認情況下,備份操作會所數據庫中的數據備份到 SQL SERVER 數據庫的默認工作目錄
(3)切換【備份數據庫】對話框中的【選項】頁面。在此頁面中,可以根據需要進行相應的設置。例如,可以根據需要將現有數據備分到現有的備份集中,也可使用數據庫中的當前數據覆蓋現有的備份集。除此之外。還可以設置備份操作的可靠性選項。
單擊【確定】按鈕,即可執行備份操作。一旦備份操作結束。SQL SERVER 數據庫系統將彈出名為 Microsoft SQL Server Management Studio 的對話框,提示備份已成功完成。
3、使用“TM”數據庫完整備份還原數據庫到備份完成時點的數據庫狀態 通過 SQL Server Management Studio 還原數據庫
使用 SQL Server Management Studio 進行數據還原操作的步驟如下所示:
(1)右擊【數據庫】節點,從彈出的快捷菜單中選擇【還原數據庫】命令,打開【還原數據庫】對話框,如下圖所示:
在[還原數據庫]對話框中的[常規]頁面中,選擇[目標]下拉列框中的[源數據庫]選項。
[選擇用于還原的備份集]列表框中將顯示用于還原TM數據庫的可用備份集,備份集,且[目標數據庫]將會被同時設置為TM
在“還原數據庫”的窗口中選擇“選項”頁,在“還原選項”選項區域中選擇“覆蓋現有數據庫”復選框,單擊確定。還原操作完成后,打開“TM”數據庫,可以看到TM數據庫已進行還原
4.實驗思考:
①SQL Server 2005物理數據庫包含了哪能幾種類型的文件以及它們的作用? SQL Server2005數據庫具有三種類型的文件:
主數據文件
主數據文件是數據庫的起點,指向數據庫中的其他文件。每個數據庫都有一個主數據文件。主數據文件的推薦文件擴展名是.mdf。它將數據存儲在表和索引中,包含數據庫的啟動信息,還包括一些系統表,這些表記載數據庫對象及其他文件的位置信息。
次要數據文件
除主數據文件之外的所有其他數據文件都是次要數據文件。某些數據庫可能不含有任何次要數據文件。次要數據文件的推薦文件擴展名是.ndf。
日志文件
SQL Server具有事物功能,日志文件包含著用于恢復數據庫的所有日志信息。每個數據庫必須至少有一個日志文件,當然也可以有多個,建立數據庫時,SQL Server會自動建立數據庫的日志文件。日志文件的推薦文件擴展名是.ldf。②數據庫備份與轉儲包含那些原理?
備份(backup)實際就是數據的副本,備份的目的是為了防止不可預料的數據丟 失和應用錯誤。
轉儲(restore)是指當數據文件或控制文件出現損壞時,將已備份的副本文件還原到原數據庫的過程
數據庫轉存實現熱備份恢復功能。通過修改初始化文件里的路徑,實現轉存。啟 動到MOUNT狀態下,將所有數據文件和日志文件通過ALTER DATABASE RENAME FILE '原始路徑/名稱' TO '當前路徑/名稱';然后將數據庫打開,重建TEMP tablespace即可。數據轉儲是數據庫恢復中采用的基本技術。
所謂轉儲即dba定期地將數據庫復制到磁帶或另一個磁盤上保存起來的過程。當數據庫遭到破壞后可以將后備副本重新裝入,將數據庫恢復到轉儲時的狀態。靜態轉儲:在系統中無運行事務時進行的轉儲操作。靜態轉儲簡單,但必須等待 正運行的用戶事務結束才能進行。同樣,新的事務必須等待轉儲結束才能執行。顯然,這會降低數據庫的可用性。動態轉儲:指轉儲期間允許對數據庫進行存取或修改。動態轉儲可克服靜態 轉儲的缺點,它不用等待正在運行的用戶事務結束,也不會影響新事務的運行。但是,轉儲結束時后援副本上的數據并不能保證正確有效。因為轉儲期間運行的 事務可能修改了某些數據,使得后援副本上的數據不是數據庫的一致版本。為此,必須把轉儲期間各事務對數據庫的修改活動登記下來,建立日志文件(log file)。這樣,后援副本加上日志文件就能得到數據庫某一時刻的正確狀態。轉儲還可以分為海量轉儲和增量轉儲兩種方式。海量轉儲是指每次轉儲全部數據庫。
增量轉儲則指每次只轉儲上一次轉儲后更新過的數據。
從恢復角度看,使用海量轉儲得到的后備副本進行恢復一般說來更簡單些。但如 果數據庫很大,事務處理又十分頻繁,則增量轉儲方式更實用更有效。
③如果數據或日志文件非空不能刪除,查找SQL Server中縮小文件大小的方法。
在SQL Server中,所有對數據庫執行的更新操作都會記錄在數據庫的事務日志文件中,除非將數據庫設為可自動收縮的或手動的對數據庫進行了收縮,否則事務日志文件將一直增長,直到達到事先設定的日志文件增長上限或用盡所有可用的磁盤空間。如果當前的數據庫文件或日志文件過大,可以使用以下兩個命令對其進行收縮: DBCC SHRINKDATABASE:收縮指定數據庫的所有數據和日志文件的大小 DBCC SHRINKFILE:收縮數據庫的某個指定數據或日志文件的大小
這兩個命令可以釋放數據庫中的空閑空間,并將數據庫或指定的數據庫文件收縮到指定的大小,但收縮后的數據文件或日志文件的大小不會小于文件中現存的有效數據所占空間的大小。在使用以上命令收縮日志文件的時候需要注意,已寫入數據庫但未被截斷的事務日志記錄是 不會被收縮的,因為雖然這部分日志記錄的信息已經寫入數據庫文件,但在使用事務日志備份進行數據庫還 原的時候,還將用到其中的信息。
對于使用簡單恢復模型的數據庫,事務日志會在每次處理檢查點(CheckPoint)時自動被截 斷。
對于使用完全恢復模型或大容量日志記錄恢復模型的數據庫,事務日志只有在執行日志備份(BACKUP LOG)時才會被截斷,這時事務日志中記錄的信息被寫入事務日志備份文件,而它們所占用的這部分空間被標記為可用(即被截斷)。
截斷事務日志并不會使日志文件變小,但可以將其中的部分空間釋放供以后寫入新的日志記錄使用。若要減少日志文件的物理大小,則要使用上面提到的
在執行BACKUP LOG語句的時候,還可以使用WITH NO_LOG(或WITH TRUNCATE_ONLY,含 義相同)參數,這時并不真正備份事務日志,而只是截斷事務日志中的非活動部分
(這和普通的BACKUP LOG語句作用相同)。這適合于剩余磁盤空間不夠進行事務日志備份或不打算保 留事務日志中的非活動部分用于數據庫恢復的情況。避免事務日志文件增長過快以致用盡所有磁盤空間的現象發生
一種辦法是將數據庫設為使用簡單恢復模型,這樣可以使SQL Server周期性的自動截斷事務日志的
非活動部分,并回收其占用的空間供以后寫入事務日志記錄使用。但這將使數據庫無法利用事務日志備份還原到即時點,降低了數據庫的可靠性,因此一般不應用于生產型數據庫。對于生產型數據庫,推薦的做法是使用完全恢復模型,并定期進行數據庫的完全備份和事務日志備份。例 如每周執行一次完全備份,每天執行一次事務日志備份,這可以通過SQL Server企業管理器中的數據庫 維護計劃向導很方便的實現(一般可以設為在每天夜里業務不繁忙的某個時刻自動執行備份)。
通過定期執行數據庫的事務日志備份,可以避免日志文件的迅速增大,而使其保持一個比較穩定的大小。
雖然數據庫備份文件也會占用很多磁盤空間,但隨時可以將這些文件移到其他磁盤上或在不需要它們的時候將其刪除,而且可以在出現故障或誤操作的時候方便的進行數據庫的還原。
由于數據文件的大小是隨數據庫中數據量的增長而增長的,數據庫中已刪除的數據所占的空間可以供新插 入的數據使用;而在定期執行了事務日志的備份后,我們可以將日志文件的大小控制在一個比較合理的范 圍。因此,一般不需要對數據庫進行收縮,也不推薦將數據庫設為自動收縮模式。
減小事務日志文件大小的
首先在該數據庫中執行CHECKPOINT命令,然后將該數據庫分離(Detach),再將與其對應的數據庫日志 文件(.ldf文件)改名或刪除或移動到其他目錄下,然后執行sp_attach_single_file_db存儲過程或在企業管 理器中重新將其附加(Attach)。由于找不到原來的日志文件,SQL Server將自動為該數據庫建立一個大 小只有504K的日志文件。但這種方法必須暫時將數據庫脫機,因此一般不適宜在生產環境中使用。
1、建議首先備份數據庫(但不是必需的):
BACKUP DATABASE database_name TO backup_device
2、備份事務日志:
BACKUP LOG database_name TO backup_device 如果不需要當前事務日志中的記錄進行數據庫還原或沒有足夠的空間進行事務日志備份的 的話,也可僅執行以下命令截斷事務日志: BACKUP LOG database_name WITH NO_LOG
3、收縮事務日志文件:
DBCC SHRINKFILE(log_file_name)其中log_file_name是事務日志文件的邏輯名稱,可以在企業管理器中數據庫屬性的“事務 日志”頁中看到(如Northwind數據庫的默認事務日志文件邏輯名稱為Northwind_log)。
4、如果日志文件仍然較大的話,可以嘗試重復執行一次 BACKUP LOG WITH NO_LOG和DBCC SHRINKFILE命令。
5、如果這時仍沒有明顯的效果,請執行DBCC OPENTRAN(database_name)檢查當前數據庫中是否存在長時間未提交的活動事務。有必要的話,可以斷開這些連接并重新嘗試截斷事務日志和收縮日志文件。
6、事務日志文件收縮完成后,建議立即執行一次數據庫的完全備份并根據實際需要制定適當的數據庫備份計劃。④思考后續實驗過程中,你計劃采用哪種方法備份自己的數據庫實驗操作結果?并說明為什么采用該方法。
答:數據庫備份有四種類型
? 完全備份 ? 事務日志備份 ? 差異備份
? 文件備份 采用完全備份
完全備份就是指對某一個時間點上的所有數據(包含用戶表、系統表、索引、視圖和存儲過程等所有數據庫對象)或應用進行的一個完全拷貝。
實際應用中就是用一盤磁帶對整個系統進行完全備份,包括其中的系統和所有數據。
這種備份方式最大的好處就是只要用一盤磁帶,就可以恢復丟失的數據。因此大大加快了系統或數據的恢復時間。
第三篇:數據庫原理上機實驗報告
廣西科技大學理學院《數據庫原理》上機實驗報告
實驗序號與實驗名稱:實驗九:用戶管理和權限管理
姓名:薛亞妮學號:201000901045
專業班級:信計101實驗日期:2012年 12月15日
一、實驗目的:理解和體會數據庫安全性的內容,加強對DBMS功能的認識。
二、實驗內容:數據庫的用戶管理和操作權限管理。
三、程序源代碼:
1、對象操作授權
sp_grantdbaccess 201000901035
grant select on 產品1045 to 201000901035
grant create view,create table to 201000901035
grant execute on sp_getgoods to 2010009010352、在授權過程中體會GRANT命令中WITH GRANT OPTION 短語的作用。
--用戶201000901045--
grant select on產品1045 to [201000901035] WITH GRANT OPTION
--用戶201000901035--
grant select on 產品1045 to [201000901035]
As [201000901035]
3、分情況收回授權,并體會REVOKE命令中GRANT OPTION FOR和CASCADE
--短語的作用
revoke select on 產品1045 from 201000901035
revoke create view,create table to 201000901035
revoke grant option for select on 產品1045 from 201000901035 CASCADE
四、實驗結果分析與總結
安全性控制是數據庫管理員(或系統管理員)的一個重要任務,他要充分利用數據庫管理系統的安全功能,保證數據庫和數據庫中數據的安全。
授權登錄用戶為當前數據庫用戶 :
sp_grantdbaccess [@loginame =] login
[,[@name_in_db =] name_in_db]
使一個登錄用戶成為數據庫用戶只是授權的第一步,數據庫管理員可以進一步為能夠連接到自己所管理數據庫的用戶在該數據庫上授予所需要的權限.收回權限:收回語句授權 :REVOKE { ALL | statement_list } FROM name_list
收回對象授權 :
REVOKE [GRANT OPTION FOR]
{ ALL [ PRIVILEGES ] | permission_list }
{[(column_list)] ON { table | view } | ON { table | view } [(column_list)]
| ON stored_procedure| ON user_defined_function }
FROM name_list
[ CASCADE ]
[ AS { group | role } ]
禁止語句權限: DENY { ALL | statement_list } TO name_list
禁止對象權限: DENY { ALL [ PRIVILEGES ] | permission_list }
{[(column_list)] ON { table | view } | ON { table | view } [(column_list)]
| ON stored_procedure| ON user_defined_function }
TO name_list
[CASCADE]
第四篇:數據庫原理及技術實驗報告2
《數據庫原理及技術》實驗報告
姓名: 莫鴻斌
學號:201601030137
班級:2016級計算機科學與技術
實驗日期: 2018-3-16
一、實驗項目
了解SQL Server2012常用組件
二、實驗目的
1.掌握SQL Server Management Studio的運用; 2.掌握SQL Server 2012常用組件;
3.如何使用SQL Server Management Studio創建數據庫及表。
三、實驗內容
1.了解SQL Server2012常用組件;
2.使用SQL Server management studio創建數據庫factory,要求將數據庫文件factory_data.MDF存放在E:data下面,其文件初始大小5MB,自動按5MB增長,將事務日志文件factory_log.LDF存放在E:data目錄下,其文件大小按1MB自動增長。3.在數據庫factory下創建如下表: 職工表(職工號(int),姓名(char(10)),性別(char(2)),出生日期(datetime),黨員否(bit),參加工作時間(datetime),部門號(int)),其中職工號作為主鍵。部門表(部門號(int),部門名(char(10)),其中部門號作為主鍵。工資表(職工號(int),發放年份(int),發放月份(int),工資(decimal(6,1))),其中職工號、年份、月份作為主鍵。
4.建立第三步創建的表之間的參照完整性規則。5.在上述表中輸入數據,每個表至少10條記錄。6.備份數據庫,考走以備下次試驗使用。
四、實驗環境
安裝有SQL Server2008的PC一臺。
五、實驗步驟及結果
1.了解SQL Server2012常用組件;
2.使用SQL Server management studio創建數據庫factory;要求將數據庫文件factory_data.MDF存放在E:data下面,其文件初始大小5MB,自動按5MB增長,將事務日志文件factory_log.LDF存放在E:data目錄下,其文件大小按1MB自動增長。
3.在數據庫factory下創建如下表: 職工表(職工號(int),姓名(char(10)),性別(char(2)),出生日期(datetime),黨員否(bit),參加工作時間(datetime),部門號(int)),其中職工號作為主鍵。部門表(部門號(int),部門名(char(10)),其中部門號作為主鍵。工資表(職工號(int),發放年份(int),發放月份(int),工資(decimal(6,1))),其中職工號、年份、月份作為主鍵。
4.建立第三步創建的表之間的參照完整性規則。
5.在上述表中輸入數據,每個表至少10條記錄。
6.備份數據庫,考走以備下次試驗使用。
六、結論及思考
第五篇:數據庫原理及應用實驗報告 6
實驗成績
《數據庫系統原理及應用》
實 驗 報 告 六
專業班級:
計算機科學與技術
學
號:
201116910233
姓
名:
范曉曈
指導教師:
蘇小玲
2013年
月
日 實驗六名稱:
SQL Server存儲過程
一、實驗內容及要求
1.使用輸入參數存儲過程的創建和執行
任務1:查詢學生的學號、姓名、選修的課程號、課程名、課程學分,將學生所在系作為輸入參數,默認值為“軟件工程系”。執行此存儲過程,并分別指定一些不同的輸入參數值,查看執行過程。
2.修改視圖
任務1:查詢指定系的男生人數,其中系為輸入參數,人數為輸出參數。執行此存儲過程,并分別指定一些不同的輸入參數值,查看執行過程。
任務2:查詢指定學生(姓名)在指定學期的選課門數和考試平均成績,要求姓名和學期為輸入參數,選課門數和平均成績用輸出參數返回,平均成績保留到小數點后兩位。
3.使用返回代碼存儲過程的創建和執行
任務1:查詢指定學生(學號)的選課門數。如果指定學生不存在,則返回代碼1;如果指定的學生沒有選課,則返回代碼2;如果指定學生有選課,則返回代碼0,并用輸出參數返回該學生的選課門數。
4.使用實現對數據庫修改、刪除和插入操作的存儲過程創建和執行
任務1:刪除指定學生(學號)的修課,如果指定的學生不存在,則顯示提示信息“沒有指定學生”;如果指定的學生沒有選課,則顯示提示信息“該學生沒有選課”。學號為輸入參數。
任務2:修改指定課程的開課學期。輸入參數為:課程號和修改后的開課學期。
任務3:在course表中插入一行數據,課程號、課程名、學分、開課學期均為輸入參數。課程號為C100、課程名為操作系統、學分為
4、開課學期為4,開課學期的默認值為3。如果學分大于10或者小于1,則不插入數據,并顯示提示信息“學分為1~10之間的整數”。
二、實驗目的
掌握存儲過程的創建和執行;掌握存儲過程中輸入參數和輸出參數的設置和使用方法。
三、實驗步驟及運行結果
1.使用輸入參數存儲過程的創建和執行
任務1:查詢學生的學號、姓名、選修的課程號、課程名、課程學分,將學生所在系作為輸入參數,默認值為“軟件工程系”。執行此存儲過程,并分別指定一些不同的輸入參數值,查看執行過程。
create procedure p_studentdept @dept char(20)='計科' as select s.sno,s.sname,c.cno,cname,s.credit from student s inner join sc on s.sno=sc.sno inner join Course c
on c.cno=sc.cno where sdept=@dept
2.修改視圖
任務1:查詢指定系的男生人數,其中系為輸入參數,人數為輸出參數。執行此存儲過程,并分別指定一些不同的輸入參數值,查看執行過程。
create procedure p_numberofBoy @dept char(20),@boynumber int output as select @boynumber=COUNT(*)from Student
where Ssex='男' and sdept=@dept
declare @boynumber int exec p_numberofBoy '計科' ,@boynumber output print @boynumber
declare @boynumber int exec p_numberofBoy '電信' ,@boynumber output print @boynumber
任務2:查詢指定學生(姓名)在指定學期的選課門數和考試平均成績,要求姓名和學期為輸入參數,選課門數和平均成績用輸出參數返回,平均成績保留到小數點后兩位。
create proc p_studentInfo @name char(20),@semester int,@count_xk int output,@avg_sscore float output as select @count_xk=count(c.cno),@avg_sscore=Avg(sscore)from Student s join SC
on s.Sno =SC.Sno join Course c
on SC.Cno =c.Cno where s.Sname=@name and c.Semester =@semester
declare @count_xk int,@avg_grade float,@avg_sscore decimal exec p_studentInfo '范曉曈',2,@count_xk output,@avg_sscore output select @count_xk as 選課門數,@avg_sscore as平均成績
3.使用返回代碼存儲過程的創建和執行
任務1:查詢指定學生(學號)的選課門數。如果指定學生不存在,則返回代碼1;如果指定的學生沒有選課,則返回代碼2;如果指定學生有選課,則返回代碼0,并用輸出參數返回該學生的選課門數。
create proc p_countxk @number decimal,@xk_number decimal output as if not exists(select Sno from Student where Sno=@number)return 1 else if not exists(select Sno from SC where Sno=@number)return 2 else begin select @xk_number=COUNT(sc.cno)from SC where Sno =@number return 0 End
declare @xk_number1 int exec p_countxk 201116910233,@xk_number1 output print @xk_number1
4.使用實現對數據庫修改、刪除和插入操作的存儲過程創建和執行
任務1:刪除指定學生(學號)的修課,如果指定的學生不存在,則顯示提示信息“沒有指定學生”;如果指定的學生沒有選課,則顯示提示信息“該學生沒有選課”。學號為輸入參數。
create proc p_delete @id numeric as if not exists(select * from Student where Sno=@id)return 1 if not exists(select * from SC where SC.Sno=@id)return 2 else return 0
declare @id numeric,@ret int exec @ret=p_delete 201116910232 if @ret =1 print '沒有該學生!' if @ret =2 print '該學生沒有選課!' if @ret =0 delete from SC where Sno=201116910232
declare @id numeric,@ret int exec @ret=p_delete 201116910222 if @ret =1 print '沒有該學生!' if @ret =2 print '該學生沒有選課!' if @ret =0 delete from SC where Sno=201116910222
declare @id numeric,@ret int exec @ret=p_delete 201116910211 if @ret =1 print '沒有該學生!' if @ret =2 print '該學生沒有選課!' if @ret =0 delete from SC where Sno=201116910211
任務2:修改指定課程的開課學期。輸入參數為:課程號和修改后的開課學期。
create proc p_alter @kc char(20),@xq int as update course set semester=@xq where cno=@kc declare @kc char(20),@xq int exec p_alter 'C003',3
修改前:
修改后:
任務3:在course表中插入一行數據,課程號、課程名、學分、開課學期均為輸入參數。課程號為C100、課程名為操作系統、學分為
4、開課學期為4,開課學期的默認值為3。如果學分大于10或者小于1,則不插入數據,并顯示提示信息“學分為1~10之間的整數”。
create proc p_insert @kc_id varchar(20),@kc_name varchar(20),@xf decimal , @xq int as if(@xf >= 1 and @xf <=10)begin insert course(cno,cname,credit,semester)values(@kc_id,@kc_name,@xf,@xq)
end else print
'學分要在1~10之間!!'
declare @kc_id varchar(20),@kc_name varchar(20),@xf decimal,@xq int exec p_insert 'C006','操作系統',3.0,6
declare @kc_id char(20),@kc_name char(20),@xf decimal,@xq int exec p_insert 'C007','毛概',11.0,4
四、實驗心得
在這次實驗中,我明白了,存儲過程只在創造時進行編譯即可,以后每次執行存儲過程都不需再重新編譯,而我們通常使用的SQL語句每執行一次就編譯一次,所以使用存儲過程可提高數據庫執行速度,存儲過程一般用來完成數據查詢和數據處理操作。
無論什么時候執行存儲過程,總要返回一個結果碼,用以指示存儲過程的執行狀態。如果存儲過程執行成功,返回的結果碼是0;如果存儲過程執行失敗,返回的結果碼一般是一個負數,它和失敗的類型有關。我們在創建存儲過程時,也可以定義自己的狀態碼和錯誤信息。
通過這次實驗,讓我深刻了解了數據庫的功能,覺得它功能非常的強大,掌握存儲過程的創建與執行,熟悉存儲過程與批處理的區別。掌握帶參數的存儲過程的創建與執行。