当前位置:网站首页>Sql Server的存儲過程詳解

Sql Server的存儲過程詳解

2022-07-05 08:02:00 遊戲編程

一:存儲過程概述
1.1 存儲過程的概念
存儲過程(Stored Procedure)是預編譯SQL語句集合,這些語句存儲在一個名稱(存儲過程的名稱)下並作為單元來處理。存儲過程代替了傳統的逐條執行SQL語句的方式,一個存儲過程中可以包含查詢、插入、删除、更新等操縱的一系列SQL語句,當這個存儲過程被調用執行時,這些操作也會同時執行。
存儲過程與其他編程語言中的過程類似,它可以接受輸入參數,並以輸出參數的格式向調用過程或批處理返回多個值;包含用於在數據庫中執行操作(包括調用其他過程)的變成語句;向調用過程或批處理返回狀態值,以指明成功或者失敗(以及失敗的原因)。
SQL Server提供了三種類型的存儲過程
1.系統存儲過程:用來管理SQL Server與顯示有關數據庫和用戶的信息的存儲過程。
2.自定義存儲過程:用戶在SQL Server中通過采用SQL語句創建存儲過程。
3.擴展存儲過程:通過編程語言(例如C)創建外部例程,並將這個例程在SQL Server中作為存儲過程使用。
1.2 存儲過程的優點
存儲過程的有點錶現在以下幾個方面:
(1)存儲過程可以嵌套使用,支持代碼重用;
(2)存儲過程可以接受與使用參數動態執行其中的SQL語句;
(3)存儲過程比一般的SQL語句執行速度快。存儲過程在創建時就已經被編譯,每次執行時,不需要重新編譯。而SQL語句每次執行都需要編譯;
(4)存儲過程具有安全特性(例如權限)和所有權鏈接,以及可以附加發到他們的證書。用戶可以被授權來執行存儲過程而不必直接對存儲過程中引用的對象具有權限(有點像JAVA面向對象裏面的封裝)。
(5)存儲過程允許模塊化程序設計。存儲過程一旦創建,以後即可在程序中調用任意多次。這可以改進應用程序的可維護性(有點像JAVA中的分層架構的思想),並允許應用程序同意訪問數據庫。
(6)存儲過程可以减少網絡通訊流量。一個需要數百行SQL語句代碼的操作可以通過一條執行過程代碼的語句來執行,而不需要在網絡中發送數百行代碼。
(7)存儲過程可以强制應用程序的安全性。參數化存儲過程有助於保護應用程序不受SQL Injection攻擊。
說明:SQL Injection是一種攻擊方式,它可以將惡意的代碼插入到以後將傳遞給SQL Server供分析和執行的字符串中。任何構成SQL語句的過程都應該進行注入漏洞檢查,因為SQL Server將執行器接收到的所有語法有效的查詢。
二: 創建存儲過程
2.1 使用可視化工具創建存儲過程
每個可視化工具都可能有一定的差异,所以用什麼工具創建存儲過程,去百度找一下資源應該很多這裏不做演示了

2.2 使用create proc語句創建存儲過程
語法如下
create proc Procedure Proc_Student
@Proc_Son int
as
select * from Student where Sno = @Proc_Son

三:管理存儲過程
3.1 執行存儲過程
存儲過程創建完成之後,可以通過EXECUTE命令執行,可簡寫為EXEC。
1.EXECUTE
EXECUTEyonglai zhixing Transact-SQL 中命令字符串、字符串、或者執行下列模塊之一:系統存儲過程、用戶自定義存儲過程、標量值用戶定義函數或者擴展存儲過程。
2.使用EXECUTE執行存儲過程
例如執行存儲過程Proc_Stu
exec Proc_Stu

3.2 查看存儲過程
1.使用 sys.sql_modules 查看存儲過程定義;
select * from sys.sql_modules

2.使用 OBJECT_DEFINITION 查看存儲過程定義
OBJECT_DEFINITION(object_id)

3.使用 sp_helptext 查看存儲過程的定義
顯示用戶定義規則的定義、默認值、未加密的Transact-SQL 存儲過程、用戶定義Transact-SQL函數、觸發器、計算列、CHECK約束、視圖或系統對象(如系統存儲過程)。語句如下:
sp_helptext 'Proc_Stu'

3.3 修改存儲過程
修改存儲過程可以改變存儲過程當中的參數或者語句,可以通過SQL語句中的 ALTER PROCEDURE 語句實現。雖然删除並重新創建該存儲過程,也可以達到修改存儲過程的目標,但是將丟失與該存儲過程關聯的所有權限。
1.ALTER PROCEDURE 語句
ALTER PROCEDURE 語句用來修改通過執行 CREATE PROCEDUR語句創建過程。該語句修改存儲過程時,不會更改權限,也不影響相關的存儲過程或觸發器。
例:修改名為“Proc_Stu”的存儲過程。
ALTER PROCEDURE [dbo].[Proc_Stu]
@Son varchar(10)
as
select * from student

3.4 重命名存儲過程
sp_rename 'Proc_Stu','Proc_StuInfo'

注意:更改對象名的任一部分都可能破壞脚本和存儲過程。建議不要使用此語句來重命名存儲過程、觸發器、用戶自定義函數或視圖;而是删除該對象,然後使用新名稱重新創建該對象。
3.5 删除存儲過程
DROP PROCENDURE Proc_Student

————————————————

原文鏈接:https://blog.csdn.net/little_jecklove/article/details/108990153
作者:學如逆水行舟,不進則退

遊戲編程,一個遊戲開發收藏夾~

如果圖片長時間未顯示,請使用Chrome內核瀏覽器。

原网站

版权声明
本文为[遊戲編程]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/186/202207050801003295.html