首頁 >php教程 >PHP开发 >關於SQL 預存程序入門基礎

關於SQL 預存程序入門基礎

高洛峰
高洛峰原創
2016-12-14 13:44:421138瀏覽

大學裡面對預存程序沒有講到什麼,工作了一段時間,對預存程序還是沒有用到,根本不需要去寫存儲過程,可能是做的軟體方向的原因吧。為了以後發展,決定從零開始學習下。

這裡看看預存程序的定義,

預存程序(Stored Procedure),是一組為了完成特定功能的SQL 語句,集經編譯後儲存在資料庫中,使用者透過指定預存程序的名字並給參數,如果該預存程序帶有參數來執行。

在SQL Server 的系列版本中,預存程序分為兩類:系統提供的預存程序和使用者自訂預存程序。

  系統SP,主要存儲master 資料庫中,並以sp_為前綴並且系統存儲過程主要是從系統表中獲取信息,從而為系統管理員管理SQL Server。

    常用系統預存程序有:

exec sp_databases; --查看数据库
exec sp_tables;        --查看表
exec sp_columns student;--查看列
exec sp_helpIndex student;--查看索引
exec sp_helpConstraint student;--约束
exec sp_stored_procedures;
exec sp_helptext 'sp_stored_procedures';--查看存储过程创建、定义语句
exec sp_rename student, stuInfo;--修改表、索引、列的名称
exec sp_renamedb myTempDB, myDB;--更改数据库名称
exec sp_defaultdb 'master', 'myDB';--更改登录名的默认数据库
exec sp_helpdb;--数据库帮助,查询数据库信息
exec sp_helpdb master;

使用者自訂預存程序是由使用者創建,並能完成某一特定功能,如:查詢使用者所需資料資訊的預存程序。

這裡我們來看看預存程序的好處;

        (1)重複使用。預存程序可以重複使用,從而可以減少資料庫開發人員的工作量。

        (2)提升效能。預存程序在創建的時候就進行了編譯,將來使用的時候不用再重新編譯。一般的SQL語句每執行一次就需要編譯一次,所以使用預存程序提高了效率。

        (3)以減少網路流量。預存程序位於伺服器上,呼叫的時候只需要傳遞預存程序的名稱以及參數就可以了,因此降低了網路傳輸的資料量。

        (4)安全性。參數化的預存程序可以防止SQL注入式的攻擊,而且可以將Grant、Deny以及Revoke權限套用到預存程序。

 

   好了,我們來看看建立的基本語法

定义存储过程的语法
    CREATE  PROC[EDURE]  存储过程名
              @参数1  数据类型 = 默认值,
               …… ,
              @参数n  数据类型 OUTPUT
            AS
            SQL语句
    GO
,参数是可选的
,参数分为输入参数、输出参数
,输入参数允许有默认值
  这里来创建一个简单的存储过程
 
CREATE PROCEDURE UserLogin
@name varchar(20),
@password varchar(20)
AS
-- 定义一个临时用来保存密码的变量
--DECLARE @strPwd NVARCHAR(20) 这里先不介绍变量。稍后的文章会详细讲到
BEGIN
select * from userinfo where userName=@name and userPass=@password
END
GO
首先我们用简单的sql查询
select * from userinfo where userName='admin'
查询结果:
---------------------
UserName  UserPass
Admin      Admin
现在我们来执行我们的存储过程
exec UserLogin admin,admin
--或这样调用:
EXEC UserLogin @name='admin',@password='admin'
查询结果:
---------------------
UserName  UserPass
Admin      Admin

注意,在SQL SERVER中,所有使用者定義的變數都以「@」開頭,OUTPUT關鍵字表示這個參數是用來輸出的,AS之後就是儲存過程內容了。只要將以上程式碼在「查詢分析器」裡執行一次,SQL SERVER就會在目前資料庫中建立一個名為「UserLogin」的預存程序。你可以打開“企業管理器”,選擇當前操作的資料庫,然後在左邊的樹型列表中選擇"可編程性->存儲過程",此時就可以在右邊的列表中看到你剛剛創建的存儲過程了(如果沒有,刷新一下即可)。

看到了在資料中呼叫預存程序的方法有兩種(這裡EXEC與EXECUTE等效);

      EXEC  過程名稱  參數值1,參數值2,....


或或

=參數值1,參數2=參數值2....

上面我們也看到了。

 如果要刪除一個預存過程,用drop

像這樣

drop PROCEDURE UserLogin

創建這樣的預存過程有什麼用呢,不是只能在數據中查看賽。

我們在做web或者winform 程序,假設需要個登錄,好,我們可以調用用這個存儲過程來登錄,根據傳入的參數,如果查詢出來有記錄,那麼這條記錄在數據庫中存在,表示登錄成功,否則失敗。

這樣做的目的更加安全,可以防止sql注入。


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn