週六週日寫了些查詢的視窗,感覺沒什麼新奇的東西,都是一堆select,後來寫的到了註冊,上下機等,在乙個方法裡面,包括了多個增刪改查的過程。可能上乙個訪問資料庫的過程返回的結果又是下乙個訪問資料庫讀取資料的引數。
也就是說,這些對資料庫的增刪改查是乙個連貫的動作,比方。註冊乙個學生的時候。涉及到註冊金額,這個註冊金額同一時候也要寫到充值表裡面去。
既然他們是一起的。後來就非常自然想到了用儲存過程,將多條sql語句封裝起來,這樣不僅避免了**中多次訪問資料庫的情況。並且也降低了**量。
以下以充值做個demo,看一下這個儲存過程:
use [secondcharge]
go/****** object: storedprocedure [dbo].[recharge] script date: 06/09/2014 11:04:35 ******/
set ansi_nulls on
goset quoted_identifier on
goalter procedure [dbo].[recharge] --充值
@stucardnum nchar(10), --卡號
@recteaname nchar(10), --充值教師
@recrmb money --充值金額 as
declare @firstrmb money --定義乙個上次卡內剩餘金額的變數
declare @recdate nchar(10) --定義充值日期
declare @rectime nchar(10) --定義充值時間
select @recdate= convert(varchar(100), getdate(), 23)
select @rectime=convert(varchar(100), getdate(), 24)
--1,先取出此卡號相應的如今的總金額
--2,先向充值表裡面寫入一條充值記錄
--3,然後更新學生資訊表裡面的金額
--4,最後返回充值資訊表
select @firstrmb=sturmb from t_stuinfo where stucardnum =@stucardnum --查詢卡內剩餘金額
insert into t_rechargeinfo values(@stucardnum,
@recteaname,
@recdate,
@rectime,
@recrmb,
'未結賬'
)update t_stuinfo set sturmb=(@firstrmb +@recrmb) where stucardnum =@stucardnum
--返回資訊:充值卡號。上次卡內剩餘金額,如今卡內剩餘金額。充值日期。充值時間,充值教師
select @stucardnum as stucardnum,
@firstrmb as firstrmb,
sturmb as lastrmb,
@recdate as recdate,
@rectime as rectime,
recteaname
from t_rechargeinfo,t_stuinfo
where t_rechargeinfo.stucardnum =t_stuinfo .stucardnum
and t_stuinfo.stucardnum =@stucardnum
and recdate=@recdate
and rectime=@rectime
其執行結果例如以下:
解釋一下:這個過程大致是這個樣子的:
--1,先取出此卡號相應的如今的總金額
--2,先向充值表裡面寫入一條充值記錄
--3,然後更新學生資訊表裡面的金額
--4,最後返回充值資訊表
首先定義好傳入的引數:卡號。充值教師,充值金額;然後,依照大致的過程。為每一條過程寫乙個sql語句;最後是輸出部分。假設輸出結果是單個引數。能夠用output,也能夠如上所看到的。輸出個表。
在輸出的時候,能夠用as更改輸出表的列名。
為什麼要更改列名呢?眼下看到兩個優點:
1,在繫結datagridview的時候。不用手動載入headertext,這樣的是對於返回到u層是datatable的情況。
2,還有一種優點就是,在將儲存過程執行完之後,將datatable轉換為實體集合的時候,由於有乙個屬性名和 datatable的欄位名必須相應的要求,所以,能夠說。必需要求select語句中使用as命名欄位名,否則實體集合會出現轉換失敗返回空集合的情況。
回滾操作儲存過程
create or replace procedure roll tab as v tab varchar2 3000 v roll tab varchar2 3000 v sql varchar2 1000 v sql 01 varchar2 1000 cursor cur tab is sele...
MySQL儲存過程事務回滾
sql過程 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 delimiter createdefiner root localhost procedure test procedure begin declareerrnoint declarecontinueh...
sql server儲存過程回滾事務
set nocount on這個很常用 作用 阻止在結果集中返回顯示受t sql語句或則usp影響的行計數資訊。當set oncount on時候,不返回計數,當set nocount off時候,返回計數 即使當set nocount on 時候,也更新 rowcount 當set nocount...