C 學習記錄 SQL Server儲存過程入門

2021-08-18 21:49:02 字數 2437 閱讀 2764

儲存過程(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...