儲存過程
阿新 • • 發佈:2018-05-12
red 結果集 sel nbsp 輸出參數 .com fff 操作 使用
本文參考:
- http://www.cnblogs.com/knowledgesea/archive/2013/01/02/2841588.html
- https://blog.csdn.net/lengxiao1993/article/details/53427266
- http://www.cnblogs.com/aabbcc/p/6626372.html
一、什麽是存儲過程(Stored Procedure)
存儲過程是一段存儲在數據庫的“子程序”,本質是一個可重復使用的SQL代碼塊,可以理解為數據庫端的“方法”。
存儲過程的好處:
①提高性能:由於數據庫執行動作時,是先編譯後執行的。然而存儲過程是一個編譯過的代碼塊,所以執行效率要比T-SQL語句高。
②提高通信速率:網絡通信中傳輸的內容是存儲過程名字,相比傳輸大量的sql語句網絡的要通信量小,提高通信速率。
③提高安全性能:存儲過程能夠使沒有權限的用戶在控制之下間接地存取數據庫,從而確保數據的安全。
舉例: 假如某個應用程序要向用戶提供修改密碼的功能,而不同用戶的用戶名和密碼都存儲在一張User表中。
如果,如果不使用存儲過程, 該應用程序在訪問數據庫時, 必須已具有操作“User”表權限的用戶身份去連接數據庫。此時如果程序員編寫的代碼出錯,或者程序員想惡意修改別人的password, 則數據庫User表的安全無法保證。
如果使用存儲過程,則可以定義一個具有修改User表權限的存儲過程changePassword(username, oldPassword, newPassword), 該存儲過程實現了嚴格的校驗邏輯,即首先檢查useranme, oldpassword是否匹配, 如果匹配, 則僅僅修改username所對應的password。
二、Sql Server使用存儲過程
1、創建存儲過程
例子使用的UserInfo表只有 UserName,UserPass,Email和主鍵 Id 列
① 簡單的無參查詢(查詢用戶名和密碼)
--創建名為GetUserInfo的存儲過程 create proc GetUserInfo as select username,userpass from UserInfo go --執行存儲過程 exec GetUserInfo
② 有返回值的簡單插入用戶(插入一條新紀錄,返回受影響的行數)
--創建名為InsertUserInfo的存儲過程 create procInsertUserInfo as insert into userinfo (username,userpass,email) values (‘newuser‘,‘123‘,‘[email protected]‘) return @@rowcount go --執行存儲過程 exec InsertUserInfo
③ 有輸入輸出參數的簡單查詢(查詢Id小於參數的用戶信息,out 結果集條數)
create proc GetUserInfoLtId @id int=20,--默認值 @count int output as select * from userinfo where id<@id set @count=(select COUNT (*) from userinfo where id<@id) --執行 declare @c int; execute GetUserInfoLtId 50 ,@count=@c output; print @c
儲存過程