1. 程式人生 > >儲存過程

儲存過程

red 結果集 sel nbsp 輸出參數 .com fff 操作 使用

本文參考:

  1. http://www.cnblogs.com/knowledgesea/archive/2013/01/02/2841588.html
  2. https://blog.csdn.net/lengxiao1993/article/details/53427266
  3. 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 proc
InsertUserInfo 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

  

儲存過程