機房重構 SQl之儲存過程

2021-06-22 23:13:17 字數 2618 閱讀 8941

上篇部落格介紹了sql檢視的使用,這篇部落格通過內容和例項應用來簡單介紹一下儲存過程。 在機房重構的過程中,犯了個大忌(資料庫設計在重構過程被修改了),所以影響了乙個功能的實現,就又重新敲了一下機房收費系統退卡功能。正如「塞翁失馬,焉知非福」,純三層的**實現變成了利用儲存過程之後的完美實現。期間的磕磕絆絆都讓我們對儲存過程加深了理解。

當需要寫多條sql語句的時候,就可以使用儲存過程,在資料庫中建立儲存過程。之後在vs中通過呼叫儲存過程來使用。

資料庫系統

中,一組為了完成特定功能的sql 語句集,經編譯後儲存在資料庫中,使用者通過指定儲存過程的名字並給出引數(如果該儲存過程帶有引數)來執行它。儲存過程是資料庫中的乙個重要物件,任何乙個設計良好的資料庫應用程式都應該用到儲存過程。

1.儲存過程只在創造時進行編譯,以後每次執行儲存過程都不需再重新編譯,而一般sql語句每執行一次就編譯一次,所以使用儲存過程可提高資料庫執行速度。

2.當對資料庫進行複雜操作時(如對多個表進行update,insert,query,delete時),可將此複雜操作用儲存過程封裝起來與資料庫提供的事務處理結合一起使用。

3.儲存過程可以重複使用,可減少資料庫開發人員的工作量

4.安全性高,可設定只有某此使用者才具有對指定儲存過程的使用權

1. 使用之前,現在sql sever中通過t_sql語句建立儲存過程。如下圖所示,右擊【儲存過程】,選擇新建儲存過程。

之後再出現的視窗中輸入建立儲存過程的**,如下所示:

create procedure [dbo].[proc_cancelcard]  --寫儲存過程的名字pro_cancelcard

--以下是定義的引數,也就是在使用此過程的時候,需要傳進來值的引數。

@cardno varchar(15),

@canceldate date,

@canceltime varchar(20),

@statue varchar(10),

@canceluserid varchar(10)

as --宣告的變數

declare

@cancelcash numeric(18, 2),

@studentno varchar(11)

begin

--給定義的變數直接進行賦值查詢

select @cancelcash =cash ,@studentno=studentno from v_studentinfo where cardno =@cardno

--將傳入的引數和已賦值的變數新插入記錄到退卡表中

insert into t_cancelcardinfo (studentno,cardno,cancelcash,canceldate,canceltime,statue,canceluserid) values(@studentno,@cardno,@cancelcash,@canceldate,@canceltime,@statue,@canceluserid)

--更新了卡表中的狀態statue

update t_cardinfo set statue ='已停用'

end

說明:如果你的儲存過程中的sql語句是第一條查詢,第二條要使用查詢結果的話,就不用定義引數直接定義變數進行賦值查詢如紅字所示

2.在vs中呼叫儲存過程

d層**:

''' ''' 呼叫儲存過程去插入,更新

'''

'''

'''

'''

''' boolean型變數

'''

public function cancelcarddal(byval encancel as entity.cancelcardentity, byval eninfo as entity.v_studententity, byval enline as entity.lineinfoentity) as boolean

dim helper as new sqlhelper '建立sqlhelper的物件

dim flag as boolean

dim sql as string = "proc_cancelcard" '建立的儲存過程的名字

dim params as sqlparameter() =

flag = helper.executenonquery(sql, commandtype.storedprocedure, params)

return flag '返回boolean型

end function

1.在使用者輸入卡號,應該先去查詢是否存在此卡號,是否是正在上機的;

2.之後應該查詢餘額,學號(這個查詢使用檢視,不過後來改完資料庫發現,這個檢視可以不用,就當是練手實踐了)和當前時間,使用者等往退卡表中新增一條記錄;

3.之後更新卡表中的卡的狀態;

4.顯示退卡資訊,提示退卡成功。

因為之前純三層的**,和這版比較之下,直接顯示了差別。**多,呼叫關係亂,很考驗人的大腦。儲存過程乙個頂多個sql,何樂而不為呢?

機房重構 儲存過程

在機房重構過程中七層的主線明白了以後就剩下大量的敲 了,這一過程無疑比較枯燥,因此有必要在機房中嘗試一些新東西,比如,儲存過程。那麼什麼是儲存過程呢?儲存過程是存放在伺服器上的預先編譯好的sql語句,在第一次執行時進行語句檢查和編譯,編譯好的儲存過程在快取記憶體中用於後續呼叫,這樣就可以使儲存過程執...

機房重構 儲存過程

儲存過程 儲存過程 stored procedure 是在大型 資料庫系統 重複使用。儲存過程可以重複使用,從而可以減少資料庫開發人員的工作量。減少網路流量。儲存過程位於伺服器上,呼叫的時候只需要傳遞儲存過程的名稱以及引數就可以了,因此降低了網路傳輸的資料量。安全性。引數化的儲存過程可以防止sql注...

機房重構 儲存過程

儲存過程 stored procedure 是使用transact sql語言編寫的一段能實現指定功能的程式。其次,這種程式被sql server編譯好後,存放在sql server資料庫中。使用者可以通過儲存過程的名稱和引數傳遞呼叫這些具有指定功能的儲存過程。儲存過程也是資料庫物件。人們通常使用儲...