❶ 資料庫儲存過程有哪些種類
一個存儲過程既是一個系統的標准組件,也是一個可編程的函數,它在資料庫中創建並保存,總體來說關系資料庫系統中存在如下幾大類型存儲過程。
1.系統存儲過程系統存儲過程以sp_開頭,用來進行系統的各項設定,取得系統的各項信息,管理系統的各項相關工作。
2.本地存儲過程本地存儲過程由用戶創建,是為了完成某一特定功能的sql語句集。事實上,一般所說的存儲過程就是指本地存儲過程。
3.臨時存儲過程臨時存儲過程分為本地臨時存儲過程、全局臨時存儲過程兩種。
((1)本地臨時存儲過程。以井字型大小(#)作為其名稱的第一個字元,則該存儲過程將成為一個存放在tempdb資料庫中的本地臨時存儲過程,且只有創建它的用戶才能執行它。
(2)全局臨時存儲過程。以兩個井字型大小(##)開始,則該存儲過程將成為一個存儲在tempdb資料庫中的全局臨時存儲過程。全局臨時存儲過程一旦創建,以後連接到伺服器的任意用戶都可以執行它,而且不需要特定的許可權。
4.遠程存儲過程在特定資料庫中,遠程存儲過程是位於遠程伺服器上的存儲過程,通常可以使用分布式查詢和EXECUTE命令執行一個遠程存儲過程。
5.擴展存儲過程擴展存儲過程是用戶使用外部程序語言編寫的存儲過程,擴展存儲過程的名稱通常以xp_開頭。
❷ 知道存儲過程名怎麼查看存儲過程代碼
使用SQL Server Management Studio在列表中查看即可。
步驟:
1、登錄SQL Server Management Studio。
2、左邊的樹點擊要查詢的庫左邊的「+」,點開後會變成「-」,下同。
6、如果是查看系統存儲過程,在第3步後點擊系統存儲過程,然後找到要查的名字,同第4,5步即可。
❸ 資料庫原理-存儲過程的類型有哪些分別有什麼特徵。
(3).存儲過程分類<1>.系統存儲過程系統存儲過程(System
Stored
Proceres)主要存儲在master資料庫中,並以sp_為前綴,並且系統存儲過程主要是從系統表中獲取信息,從而為系統管理員管理SQL
Server提供支持。<2>.本地存儲過程本地存儲過程(Local
Stored
Proceres)也就是用戶自行創建在用戶資料庫中的存儲過程。事實上一般所說的存儲過程值得就是本地存儲過程。用戶創建的存儲過程是由用戶創建並能完成某一特定功能(如查詢用戶所需的數據信息)的存儲過程。<3>.臨時存儲過程臨時存儲過程(Temporary
Stored
Proceres)可分為以下兩種:A.本地臨時存儲過程如果在創建存儲過程中,以井號(#)作為其名稱的第一個字元,則該存儲過程將成為一個存放在tempdb資料庫中的本地臨時存儲過程(例如,CREATE
PROCEDURE
#book_proc.....)。本地臨時存儲過程只有創建它的連接的用戶才能夠執行它,而且一旦這位用戶斷開與SQL
Server的連接,本地臨時存儲過程就會自動刪除,當然,這位用戶也可以在連接期間用DROP
PROCEDURE命令刪除多創建的本地臨時存儲過程。B.全局臨時存儲過程如果在所創建的存儲過程名稱是以兩個井號(#
#)開始,則該存儲過程將成為一個存儲在tempdb資料庫中的全局臨時存儲過程,如果沒有,便立即將全局臨時存儲過程刪除;如果有,SQL
Server會讓這些執行中的操作繼續進行,但是不允許任何用戶再執行全局臨時存儲過程,等到所有未完成的操作執行完畢後,全局臨時存儲過程就會自動刪除。由於全局臨時存儲過程能夠被所有的連接用戶使用,因此,必須注意其名稱不能和其他連接所採用的名稱相同。<4>.遠程存儲過程遠程存儲過程(Remote
Stored
Proceres)是位於遠程伺服器上的存儲過程,通常可以使用分布式查詢和EXECUTE命令執行一個遠程存儲過程。
❹ 什麼是系統存儲過程
系統存儲過程一般來講是資料庫系統自身的過程,是一種不允許被用戶修改的過程,你可以在過程中點右鍵,「編輯」是灰色的。
系統存儲過程其實也類似於我們自己創建的存儲過程,是對系統的運行起到關鍵作用的過程,所以不允許被用戶修改;因為如果錯誤的修改,可能導至資料庫的異常或崩潰;
系統過程是一些資料庫結構本身的操作,或者是一些系統特定的功能,比如附加資料庫文件的系統過程,查看幫助信息的系統過程等等;如果這些都可以被你修改,那麼他們的數據的核心也就可以隨便被別人知道了。因為過程中可能存在資料庫的核心演算法,那不被其它競爭廠家學到手了。
要知道為什麼每種資料庫的性能有如此大的差別,一個與設計的核心原理有關,另一個與他們提供的各種演算法有相當大的關系。
你可以看一看各種資料庫的基礎,龍其是演算法分析。不過要一定的基礎才能看懂。
❺ 系統存儲過程存儲在哪個資料庫中
sysobjects表裡面會保存存儲過程的相關信息
select * from sysobjects where id=object_id( '所有者.存儲過程名 ')
存儲過程的主體內容則保存在 資料庫名字-->可編程行-->存儲過程 下面
系統表:syscomments
直接看不方便可以用系統存儲過程sp_helptext
❻ 如何查看存儲過程運行到哪個語句了
存儲過程(procere 過程)
SQL Server2005 的存儲過程包含一些 T-SQL 語句並以特定的名稱存儲在數據中(存儲過程也是一種資料庫對象)可以在存儲過程中聲明變數,有條件的執行及其他各項強大的程序設計功能
SQL Server2005 的存儲過程與其它育種設計語言的過程類似,同樣按以下方式運行:
(1)它能夠包含執行各種資料庫操作的語句,並且可以調用其他的存儲過程;
(2)能夠接受輸入參數,並以輸出參數的形式將多個數據值返回給調用程序(Calling Procere)或批處理(Batch);
(3)向調用程序或批處理返回一個狀態值,以表明成功或失敗(以及失敗的原因);
(4)存儲過程(Stored Proceres) 是一組為完成特定功能的SQL 語句集,經編譯後,存儲在資料庫中,用戶通過指定存儲過程的名字給出參
數(如果該存儲過程帶有參數)來執行它;
存儲過程的類型:
一、(系統存儲過程):存儲過程在運行時生成執行方式,其後在運行時執行速度很
SQL Server2005 不僅提供用戶自定義存儲過程的功能,而且也提供許多可作為工具使用的系統存儲過程;
系統存儲過程(Systerm StroedProceres) 主要存儲在master資料庫中,並以 sp_ 為前輟,並且系統存儲過程主要是從系統表中獲取信息,從而為管理員SQL Server2005提供支持。通過系統存儲過程SQL Server2005中的許多管理性或信息性的活動(如了解數據對象,資料庫信息等)都可以被有效地完成,盡管這些系統存儲過程被存儲在master資料庫中,但是仍然可以在其他 資料庫中對其進行調用,在調用時,不必在存儲過程前面加上資料庫名,而且當創建一個資料庫時,一些存儲過程會在新的資料庫中被自動創建;
系統存儲過程所能完成操作很多,如提供幫助的存儲過程
sp_helpsql 顯示關於SQL語句,存儲過程和其他主題的信息
sp_help 提供關於存儲過程或其他資料庫對象的報告
sp_helptext 顯示存儲過程和其他對象文本
sp_depends 列舉引用或依賴指定對象的所有存儲過程
sp_talbes 取得資料庫中關於表和視圖的相關信息,
sp_renameedb 更改資料庫的名稱
SQL Server2005系統存儲過程可以使用戶很容易地從系統表中提取信息,管理資料庫,並執行涉及更新系統表的其他任務
系統存儲過程中在master資料庫中創建,由系統管理員管理,所有系統存儲過程的名字均以sp_開始
如果過程以sp_前綴命名的過程在當前資料庫中找不到,SQL Server2005就在master資料庫中尋找,以sp_前綴命名的過程中引用的表如果不能在當前資料庫中解析出來,將在master資料庫查找
當前系統存儲過程的參數是保留字或對象名,且對象名由資料庫或擁有者名字限定時,整個名字必須包含在單引號中,一個用戶可以在所有資料庫中執行一個系統存儲過程的許可權,否則在任何資料庫中都不能執行系統存儲過程
二、(本地存儲過程)
本地存儲過程(Local Stored Proceres)也就是用戶自行創建並存儲在用戶資料庫中的存儲過程,一般所說的存儲過程就是指的是本地的
用戶創建的存儲過程是由用戶創建並能完成某一特定功能(如:查詢用戶所需要的數據信息)的存儲過程
三、(臨時存儲過程)
臨時存儲過程(Temporary StoredProceres)可分為以下兩種
1)本地臨時存儲過程
不論哪一個資料庫是當前資料庫,如果在創建存儲過程時,以井字型大小 (#) 作為其名稱的,第一個字元,則該存儲過程將成為一個存放在tempdb資料庫中的本地臨時存放存儲過程(如:CREATE PROCEDURE #book_proc) 本地臨時存儲過程只有創建它的連接的用戶才能夠執行它,而且一但這位用戶斷開與 sql-server的連接(也就是注銷sql-server2005)本地臨時存儲過程就會自動刪除,當然,這位用戶也可以連接期間用 DROP PROCEDURE 命令刪除他所創建的本地臨時存儲過程;
由於本地存儲過程的適用范圍僅限於創建它的連接,因此,不需擔心其名稱會和其他連接所採用的名稱相同
2)全臨時存儲過程
不論哪一個資料庫當前資料庫,只要所創建的存儲過程名稱是以兩個井字型大小(##)開始,則該存儲過程將成為一個存儲在tempdb 資料庫中的全局臨時存儲過程(例如:create procere ##book_proc) 全局臨時存儲過程一旦創建,以後連接到 SQL Server2005 的任意用戶都能執行它,而且不需要特定的許可權
當創建全局臨時存儲過程的用戶斷開與SQL Server2005的連接時,SQL Server2005將檢查是否有其他用戶在執行該全局臨時存儲過程,如果沒有,便立刻將全局臨時存儲過程刪除,如果有SQL Server2005會讓這些正在執行中的操作繼續進行,但是不允許任何用戶再執行全局臨時存儲過程,等到有未完成的操作執行完畢後,全局臨時存儲過程就會自動刪除;
由於全局臨時存儲過程能夠被所有的連接用戶使用,因些必須注意其名稱不能和其他連接所採用的名稱相同
不論創建的是本地臨時存儲過程還是全局臨時存儲過程,只要SQL Server2005一停止運行,它們將不復存在;
四(遠程存儲過程)
在SQL Server2005 中,遠程存儲過程(Remote Stored Proceres)是位於遠程伺服器上的存儲過程,通常可以使用分布式查詢和 excute 命令執行一個遠程存儲過程;
五(擴展存儲過程)
擴展存儲過程(Extended Stored Proceres)是用戶可以使用外部程序語言編寫的存儲過程,通過擴展存儲過程可以彌補SQL Server2005的不足,它在使用和執行上與一般的存儲過程完全相同;可以將參數傳遞給擴展存儲過程,擴展存儲過程也能夠返回結果和狀態值;
為了區別擴展存儲過程的名稱通常以xp_開頭,擴展存儲過程是以動態鏈接庫(DLLS)的形式存在,能讓SQL Server2005動態地裝載和執行,擴展存儲過程一定要存儲在系統資料庫 master 中
存儲過程的優點
(1) 通過本地存儲、代碼預編譯和緩存技術實現高性能的數據操作
(2) 通過用編程結構和過程實現編程框架;如果業務規則發生變化,可以通過修改存儲過程來適應新的業務規則,而不必修改客戶端的應用程 序,這樣所有調用該存儲過程的應用程序就會遵循新的業務規則;
(3) 通過隔離和加密的方法提高資料庫的安全性。資料庫可以通過得到許可權來執行存儲過程,而不必給予用戶直接訪問資料庫對象的許可權,這 些對象交收存儲過程來執行操作,另外,存儲過程可以加密,這樣用戶就無法閱讀存儲過程中的T-sql語句。這樣做將資料庫的結構和數 據庫用戶隔離開來,時一步保證數據的完整性和可靠性;
存儲過程與視圖的比較
(1) 可以在單個存儲過程執行一系列T-SQL 語句,而在視圖中只能是 select 語句
(2) 視圖不能接受參數,只能返回結果集;而存儲過程可以接受參數,包括輸入,輸出參數,並能返回單個或多個結果集以及返回值,這樣可 大大地提高應用的靈活性;
一般來說,人們將經常用到的多個表的連接查詢定義為視圖,而存儲過程完成復雜的一第列的處理,在存儲過程中也會經常用到視圖;
創建存儲過程
CREATE PROCEDURE procere_name
[WITH ENCRYPTION]
[WITH RECOMPILE]
AS
Sql_statement
其中 with encryption 對存儲過程進行加密; with recompile 對存儲過程重新編譯
例如:使用T-SQL 語句在book資料庫中創建一個名為p_book1的存儲過程 該存儲過程返回book1表中所有出版社為"中國長安"的記錄
USE book
GO
CREATE PROCEDURE p_book1
AS
SELECT * FROM book1 WHERE 出版社='中國長安'
執行存儲過程
存儲過程創建成功後,用戶可以執行存儲過程來檢查存儲過程的返回結果;基本語法如下:
exec procere_name
例如:使用T-SQL語句執行上面創建的存儲過程 運行命令如下:
USE book
GO
exec p_book1
在運行完畢後,在SQL-Server ManagementStudio 查詢窗口中返回的結果
存儲過程創建成功後可以在 SQL-Server ManagementStudio 窗口中下查看存儲過程的屬性
例如:在 SQL-Server ManagementStudio 窗口中查看存儲過程 p_book1 的屬性:
對象資源管理器-> 展開book選項-> 展開可編程性-> 右擊 p_book1選擇修改命令 就可以修改存儲過程命令屬性
帶參數的存儲過程
由於視圖沒有提供參數,對於行的篩選取只能綁定在視圖中定義,靈活性不大,而存儲過程提供了參數,大大提高了系統開發的靈活性
向存儲過程設定輸入、輸出參數主要目的是通過參數向存儲過程輸入和輸出信息來擴展存儲過程的功能,能過設定能數,可以多次使用同一存儲過程並按要求查找所需要的結果;
1、帶輸入參數的存儲過程
輸入參數是指由調用程序向存儲過程傳遞的參數,它們在創建存儲過程語句中被定義,在執行存儲過程中給出相應的變數值,為了定義輸入參數存儲過程,需要在 create procere 語句中聲明一個或多個變數作為參數;其語法格式如下:
CREATE PROCEDURE procerd_name
@parameter_name datatype=[default]
[with encryption]
[with recompile]
AS
Sql_statement
其中各項參數如下
(1) @parameter_name: 存儲過程的參數名稱,必須以符號@為前綴
(2) Datatype: 參數的數據類型
(3) Default: 參數的默認值,如果執行存儲過程時未提供該參數的變數值,則使用default值
例子:使用T-SQL語句在book數據表中創建一個名為p_book1p的存儲過程,該存儲過程能根據給定的出版社回該出版社代碼對應的book1表中的的記錄:
分析:直接把上面的例子最後面的SQL語句 select * from book1 where 出版社='中國長安' 將裡面的 「出版社='中國長安'」用變理代替為 select * from book1 where 出版社= @出版社 其中變數名 @出版社取了代值 '中國長安';由於使用了變數,所以需要定義該變數,我們把「出版社」的長度設為是20位字元串;所以在 AS 之前定義變更@出版社 varchar(20);
create procere p_book1p
@出版社 varchar(20)
AS
SELECT * FROM book1 WHERE 出版社=@出版社
執行含有輸入參數的存儲過程
1)使用參數名傳遞參數值
在執行存儲過程的語句中通過語句 @paramter_name=value 給出參數的傳遞值,當存儲過程含有多個參數時,參數值可以任意順序設定,對於允許空值和具有默認值的輸入參數可以不給出參數的傳遞值;其格式語法如下:
exec procere_name
[@paramenter_name=value]
[,....n]
例子:用參數名傳遞參數值的方法執行存儲過程p_book1p,分別查出出版社為'中國長安'和"安徽人民"書的記錄
exec p_book1p @出版社='中國長安'
go
exec p_book1p @出版社='安徽人民'
go
2) 按位置傳遞參數值
在執行存儲過程的語句中,不通過參數傳遞值面直接給出參數的傳遞值,當存儲過程含有多個輸入參數時,傳遞值的順序必須與存儲過程中定義的輸入參數順序相一致,按位置傳遞參數時,也可以忽略空值和具有默認值的參數,但不能因此破壞輸入參數的設定順序;比如:在一個含有4個參數的存儲過程中,用戶可以忽略第3和第四個參數,但無法在忽略第3個的情況下而指定第4個參數的輸入值;
語法格式如下:
exec procere_name
[value1,value2,....]
例子:用按位置傳遞參數值的方法執行存儲過程 p_book1p 分別查找出版社為「中國人口」和「內蒙人民」書的記錄
exec p_book1p '內蒙人民'
go
exec p_book1p '中國人口'
go
按位置傳遞參數值比按參數名傳遞參數值更簡捷比較適合參數值較少的情況,而按照參數名傳遞的方法使程序的可讀性增強,特別是參數數量較多時,建議用按參數名傳遞參數的方法,這樣的程序可讀性/可維護性都要好一些;
3) 帶輸出參數的存儲過程
如果需要從存儲過程中返回一個或多個值,可以通過在創建存儲過程的語句中定義輸出參數來實現,為了使用輸出參數,需要在
create procere 語句中指定 output 關鍵字 輸出語法如下: @parameter_name datatype=[defautl] OUTPUT
例如:創建存儲過程 p_book1Num 要求能根據用戶給定的出版社,統計該出版社的出書數量,並將數量以輸入變數的形式返回給用戶:
CREATE PROCEDURE p_bookNum
@出版社 var(20),@bookNum smallint output
AS
SET @BOOK1Num= --(這個裡面是給book1Num 賦值)
(
select count(*) from book1
where 出版社=@出版社
)
ptrint @book1Num
執行存儲過程p_book1Num
由於在存儲過程 p_book1Num 中使用了參數@出版社和@book1Num 所以在測試時需要先定義相應的變數,對於輸入參數@出版社需要賦值,而輸出參數 @book1Num 無需賦值,它是從存儲過程中獲得返回值供用戶進一步使用的
declare @出版社 varchar(20), @book1Num SMALLINT
set @出版社=「中國長安」
exec p_book1Num @出版社,@book1Num
說明:這里在是sql server2005 環境下進行測試的,而在進行系統開發時,往往變數的定義,賦值,使用都是在應用程序中設計的,存儲過程 p_book1Num 的 print @book1Num語句也是為了在 SQL Server2005環境中測試而設計的
刪除、修改、重命名存儲過程
修改存儲過程:是由alert 語句來完成的,語法如下:
ALTER procere procere_name
[with encryption]
[with recompile]
as
Sql_statement
例子:使用T-SQL語句修改存儲過程 p_book1p 根據用戶提供的出版社名稱進行模糊查詢並要求加密:
alter procere p_book1p
@出版社 varchar(20)
with encryption
as
select 出版社,ISBN號,定價,作者姓名
from book1,teacher
where book1.編號=teacher.編號 and 出版社 like '%@出版社%'
存儲過程的刪除:存儲過程的刪除是通過DROP語句來實現的
例如:使用T-SQL語句來刪除存儲過程p_book1
use book
go
drop procere p_book1
使用SQL-Server Management Studio窗口刪除存儲過程 p_book1p:
對象資源管理器-> 展開BOOK-> 展開可編程性-> 右鍵dbo.p_book1p->刪除 就可以了
存儲過程重命名:
對象資源管理器-> 展開BOOK-> 展開可編程性-> 右鍵dbo.p_book1p->重命名
存儲過程的重編譯處理
在存儲過程中所用的查詢只在編譯時進行優化,對資料庫進行索引或其他會影響資料庫統計的更改後,可能降低已編譯的存儲過程的效率,通過對存儲過程進行重新編譯,可以重新優化查詢;
在SQL-Server2005 中有三種方法重新編譯的方法:
1) 在創建存儲過程時使用 with recompile 子句
with recompile 子句可以指示 sql server2005 不將該存儲過程的查詢計劃保存在緩存中,而是在每次運行時重新編譯和優化,並創建新 的查詢計劃;下面是例子:
use book
go
create procere p_book1p
@出版社 varchar(20)
with recompile
as
select * from book1 where 出版社=@出版社
這種方法並不常用,因為在每次執行存儲過程時都要重新編譯,在整體上降低了存儲過程的執行速度,除非存儲過程本身是一個比較復雜,耗時的操作,編譯的時間相對於執行存儲過程時間少;
2) 在執行存儲過程時設定重新編譯選項
通過在執行存儲過程時設定重新編譯,可以讓SQL-Server2005在執行存儲過程時重新編譯該存儲過程,在這一次執行後,新的查詢計劃又被保存在緩存中;基語法格式是:
execute procere_name with recompile
以重新編譯的方式執行存儲過程p_book1p:
use book
go
execute p_book1p '中國長安'with recompile 此方法一般在存儲過程創建後,數據發生了顯著變化時使用
3) 通過系統存儲過程設定重新編譯選擇;其語法如下
exec sp_recomplie OBJECT 其中OBJECT 當前資料庫中的存儲過程,表或視圖的名稱
例子:執行下面的語句將導致book1表的觸發器和存儲過程在下次運行時將被重新編譯:
exec sp_recompile book
===========================================================================================================================
觸發器的創建和管理
概述:在SQL-Server2005資料庫系統中,存儲過程和觸發器都是SQL語句和流程式控制制語句的集合
===========================================================================================================================
❼ MS sql如何使用存儲過程
一、存儲過程的概念
T-SQl和C語言一樣 ,是一門結構化的語言。
什麼是存儲過程?
存儲過程是SQL查詢語句與控制流程語句的預編譯集合,並以特定的名稱保存在資料庫中。存儲過程也是資料庫對象
分類:
系統存儲過程: 以sp_或xp_打頭
用戶自定義 :以proc_打頭
存儲過程的優點:
執行速度快 效率高
模塊式編程
減少網路流量
提高安全性
二、系統存儲過程
SQl server 的系統存儲過程保存在master資料庫中,且所有命名的系統存儲過程命名以「Sp_」開頭。在master資料庫中,
系統存儲過程數量如下:
代碼如下 復制代碼
select count([name])as '系統存儲數量' from sysobjects
where [name] like 'sp_%'
EXECUTE 用來表示調用存儲過程,也可以縮寫為EXEC,
調用存儲的語法如下:
EXECUTE 『存儲過程名』 『參數』 ---如果沒有參數則省略參數
常用的系統存儲過程
EXEC sp_databases 列出當前系統中的資料庫
EXEC sp_renamedb 'Northwind','Northwind1' 修改資料庫的名稱(單用戶訪問)
USE stuDB GO EXEC sp_tables 返回某個表列的信息
EXEC sp_columns 查看指定列的信息
EXEC sp_help 查看某個表的所有信息
EXEC sp_helpconstraint '表名' 查看某個表的約束
EXEC sp_helpdb '資料庫名' 或 EXEC sp_helpdb 查看指定資料庫或所有資料庫信息
EXEC sp_helptext '對象名稱' 顯示資料庫對象(存儲過程、觸發器、試圖)的定義文本
EXEC sp_helpindex '表名' 查看指定表的索引信息
EXEC sp_renamedb '原名稱','新名稱' 更改資料庫名稱
EXEC sp_stored_proceres 列出當前環境可用的所有存儲過程
除了系統存儲過程,SQL Server 還提供以Xp_開頭的擴展存儲過程,如可以調用DOS命名的,XP_cmdshell 存儲過程
用法如下:
代碼如下 復制代碼
EXEC Xp_cmdshell DOS 命名 [NO_OUTPUT]
NO_OUTPUT 為可選參數,表示是否輸入存儲過程返回的信息
三、用戶自定義存儲過程
1、語法
代碼如下 復制代碼
create procere 存儲過程名
@參數1名 數據類型 [=默認值] [參數類型(輸入/輸出)]
... ...
@參數n名 數據類型 [=默認值] [參數類型(輸入/輸出)]
as
begin
sql語句
end;
go
參數類型分為輸入參數和輸出參數,默認為輸入參數,使用OUTPUT表示輸出參數。創建存儲過程最好以proc開頭
2、創建不帶參數的存儲過程
代碼如下 復制代碼
--判斷存儲過程是否存在
if object_id('proc_student','procere') is not null
drop procere proc_student
go
create procere proc_student
as
begin
select pcid as '電腦編號',
case pcuse
when 0 then '空閑'
when 1 then '忙碌'
end as '使用狀態' from pc
end;
--調用存儲過程
execute proc_student select * from pc
go
3、創建帶輸入參數的存儲過程
語法:
代碼如下 復制代碼
create procere 存儲過程名
@參數1名 數據類型 [=默認值]
....
@參數2名 數據類型[=默認值]
as
SQl與語句
...
go
--例如
--創建帶輸入參數的存儲過程
代碼如下 復制代碼
if object_id('proc_stu','procere') is not null
drop procere proc_stu
go
create procere proc_stu
@pcuse int
as
begin
select pcid as '電腦編號',
case pcuse
when 0 then '空閑'
when 1 then '忙碌'
end as '使用狀態' from pc where pcuse=@pcuse end;
--調用存儲過程
execute proc_stu @pcuse=1
4、創建帶輸出參數的存儲過程
代碼如下 復制代碼
--創建帶輸出參數的存儲過程
if OBJECT_ID('proc_s','procere') is not null
drop procere proc_s
go
create procere proc_s
@pcid int,
@pcus int output
as
begin
select @pcus=pcuse from pc where pcid=@pcid end;
--調用存儲過程
declare @pcus int execute proc_s 5,@pcus output
四、處理錯誤信息
當存儲過程的語句十分復雜時,可以在存儲過程中加入錯誤語言。SQL Server中可以使用RAISERROR 返回用戶自定義的錯誤信息。
RAISERROR 語法如下:
RAISERROR (自定義的錯誤信息,錯誤的嚴重級別,錯誤狀態)
自定義錯誤信息:表示輸出信息:表示輸出的錯誤提示文本
錯誤的嚴重級別:表示用戶自定義錯誤的嚴重性級別。(0-18極)
錯誤的狀態:表示自定義錯誤的狀態,值的范圍在1-127