存儲過程


usesmtdata
go
/*刪除過程*/

dropprocedureusp_search_user
go


/*創建過程*/
createprocedureusp_search_user
@usernamevarchar(32)
as
select@username=@username+'%'
selecttop10usernameas用戶名,passwordas密碼
fromnormaluser
whereusernamelike@username
orderby用戶名DESC
GO
/*修改過程ALTER*/
ALTERprocedureusp_search_user
@usernamevarchar(32)
as
select@username=@username+'%'
selecttop10usernameas用戶名,passwordas密碼
fromnormaluser
whereusernamelike@username
orderby用戶名DESC

一、先介紹一下什麼是存儲過程

存儲過程是利用SQLServer所提供的Tranact-SQL語言所編寫的程序。Tranact-SQL語言是SQLServer提供專爲設計數據庫應用程序的語言,它是應用程序和SQLServer數據庫間的主要程序式設計界面。它好比Oracle數據庫系統中的Pro-SQL和Informix的數據庫系統能夠中的Informix-4GL語言一樣。這類語言主要提供以下功能,讓用戶可以設計出符合引用需求的程序:
1)、變量說明
2)、ANSI兼容的SQL命令(如Select,Update….)
3)、一般流程控制命令(if…else…、while….)
4)、內部函數


二、存儲過程的書寫格


CREATEPROCEDURE[擁有者.]存儲過程名[;程序編號]
[(參數#1,…參數#1024)]
[WITH
{RECOMPILE|ENCRYPTION|RECOMPILE,ENCRYPTION}
]
[FORREPLICATION]
AS程序行

其中存儲過程名不能超過128個字。每個存儲過程中最多設定1024個參數
(SQLServer7.0以上版本),參數的使用方法如下:

@參數名數據類型[VARYING][=內定值][OUTPUT]

每個參數名前要有一個“@”符號,每一個存儲過程的參數僅爲該程序內部使用,參數的類型除了IMAGE外,其他SQLServer所支持的數據類型都可使用。
[=內定值]相當於我們在建立數據庫時設定一個字段的默認值,這裏是爲這個參數設定默認值。[OUTPUT]是用來指定該參數是既有輸入又有輸出值的,也就是在調用了這個存儲過程時,如果所指定的參數值是我們需要輸入的參數,同時也需要在結果中輸出的,則該項必須爲OUTPUT,而如果只是做輸出參數用,可以用CURSOR,同時在使用該參數時,必須指定VARYING和OUTPUT這兩個語句。

例子:
CREATEPROCEDUREorder_tot_amt@o_idint,@p_totintoutputAS
SELECT@p_tot=sum(Unitprice*Quantity)
FROMorderdetails
WHEREordered=@o_id

例子說明:
該例子是建立一個簡單的存儲過程order_tot_amt,這個存儲過程根據用戶輸入的定單ID號碼(@o_id),由定單明細表(orderdetails)中計算該定單銷售總額[單價(Unitprice)*數量(Quantity)],這一金額通過@p_tot這一參數輸出給調用這一存儲過程的程序


三、在SQLServer中執行存儲過程


在SQLServer的查詢分析器中,輸入以下代碼:
declare@tot_amtint
executeorder_tot_amt1,@tot_amtoutput
select@tot_amt

以上代碼是執行order_tot_amt這一存儲過程,以計算出定單編號爲1的定單銷售金額,我們定義@tot_amt爲輸出參數,用來承接我們所要的結果
發佈了52 篇原創文章 · 獲贊 0 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章