儲存過程(stored procedure),是一組為了完成特定功能的sql 語句。經過編譯後儲存在資料庫中,使用者通過指定儲存過程的名字並給出引數(如果該儲存過程帶有引數來執行)。
儲存過程分為兩類:系統提供的儲存過程和使用者自定義的儲存過程。
系統sp,主要儲存在master 資料庫中,並以sp_為字首;
系統儲存過程主要是從系統表中獲取資訊,從而為系統管理員管理sql server。
儲存過程的好處:
1)重複使用:儲存過程可以重複使用,從而可以減少資料庫開發人員的工作量;
2)提高效能:儲存過程在建立的時候就進行了編譯,將來使用的時候不用再重新編譯。一般的sql語句每執行一次就需要編譯一次,所以使用儲存過程提高了效率;
3)減少網路流量:儲存過程位於伺服器上,呼叫的時候只需要傳遞儲存過程的名稱以及引數就可以了,因此降低了網路傳輸的資料量;
4)安全性:引數化的儲存過程可以防止sql注入式的攻擊,而且可以將grant、deny以及revoke許可權應用於儲存過程。
定義儲存過程的語法:
create proc[edure] 儲存過程名
@引數1 資料型別 = 預設值,
…… ,
@引數n 資料型別 output
assql語句
go
說明:引數是可選的,引數分為輸入引數、輸出引數(output),輸入引數允許有預設值。
這裡來舉乙個簡單的儲存過程例子:
create procedure userlogin
@name varchar(20),
@password varchar(20)
asbegin
select * from userinfo where username=@name and userpass=@password
endgo
首先我們用簡單的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,....
或者exec 儲存過程名 引數1=引數值1,引數2=引數值2,....
上面我們也看到了。
如果要刪除乙個儲存過程,用drop;
像這樣:
drop procedure userlogin
建立這樣的儲存過程有什麼用呢,不就是只能在資料庫中檢視?
非也,譬如我們在做web或者winform 程式或其他專案開發時,假設需要做個登入,好,我們可以呼叫這個儲存過程來登入,根據傳入的引數,如果查詢出來有記錄,那麼這條記錄在資料庫中存在,表示登入成功,否則失敗。
這樣做的目的是更加安全,可以防止sql注入。
sql server 學習記錄
這是我學習sqlserver2008的學習過程和筆記,以此來記錄我的成長。建立資料庫 create database students on primary name n students1 filename n e add students1.mdf size 5120kb maxsize unl...
C 學習記錄
由於之前寫c c 程式時,動不動就容易報錯,也就沒繼續用,一直覺得c 很難。最近在學習機器學習時,用到了乙個c 神經網路庫,並且在菜鳥教程中看到了c 的教程,於是學了一下,發現根本沒有想象中的那麼難,可能也是這個教程講的比較好吧。現在把一些學到的比較重要的點記錄一下吧!1.ifndef 突然覺得在標...
C 學習記錄
原創 主要是c 和c 不同的地方,會寫一下,流程控制什麼的都差不多,比較適合c 轉c 的人看 以前沒有系統的學過c 現在補一下,以前完全是為了看懂別人的 稍微看一下,也沒有太想在這方面下功夫,學一點是一點,目標是能修改別人的c 服務端程式。一.包含 包含原理上什麼檔案都能包含進來,但是一般只包含.c...