從來(lái)沒(méi)有接觸過(guò)存儲(chǔ)過(guò)程,為了這個(gè)項(xiàng)目寫(xiě)了幾個(gè)存儲(chǔ)過(guò)程。就當(dāng)是學(xué)習(xí)了,呵呵,這個(gè)購(gòu)物車(chē)的存儲(chǔ)過(guò)程中使用了table(表),cursor(游標(biāo))變量。
要求如下:
一個(gè)商品表[ware],里面包含有的字段有id,marketprice,memberprice,vipprice等等,還一個(gè)會(huì)員購(gòu)物車(chē)[membercar]數(shù)據(jù)表。包括的有id,memberid,wareid,warenum等等?,F(xiàn)要求是能取得購(gòu)物車(chē)表里的所有數(shù)據(jù)和marketprice*warenum(所有商品和)的總價(jià)錢(qián),即有n件商品就獲取這n件商品的總價(jià)錢(qián)而不是單一的價(jià)錢(qián)。本來(lái)在客戶端里直接根據(jù)購(gòu)物車(chē)[membercar]表的數(shù)據(jù)讀取商品表[ware]里的數(shù)據(jù),再用變量累加即可的。但問(wèn)題卻是,購(gòu)物車(chē)?yán)锏乃猩唐凤@示使用了分頁(yè)顯示。所以累加時(shí)就出問(wèn)題,如果為了累加這些價(jià)錢(qián)而在分頁(yè)循環(huán)顯示后再加一個(gè)循環(huán)所有記錄來(lái)累加價(jià)錢(qián)數(shù)據(jù),這樣不是不行,但效率就可想而知了!??!
現(xiàn)一個(gè)解決方法就是,重新構(gòu)造一個(gè)購(gòu)物車(chē)表的鏡像,但卻多了商品的幾個(gè)價(jià)錢(qián)總數(shù)字段。即marketprice*warenum(單一商品)。從而讀取購(gòu)物車(chē)時(shí)不是讀取原來(lái)購(gòu)物車(chē)數(shù)據(jù)表,而是讀取這個(gè)鏡像數(shù)據(jù)表,并在讀取時(shí)累加這些總價(jià)錢(qián)。
存儲(chǔ)過(guò)程代碼如下:
----#####################################################################################
----# 過(guò)程作用:返回用戶購(gòu)物車(chē)?yán)锏乃袛?shù)據(jù),并包含統(tǒng)計(jì)了商品的價(jià)錢(qián) (價(jià)錢(qián)=商品表的價(jià)格*購(gòu)物車(chē)表里的數(shù)量)
----# 作者:死在水中的魚(yú)
----# 日期:2004年10月15日
----#####################################################################################
create procedure membercar_info @memberid int as
--使用此句才能保持客戶端的數(shù)據(jù)
set nocount on
declare @car_id int,@car_wareid int,@car_warenum smallint
declare @car_totalmemberprice numeric(8,2),@car_totalmarketprice numeric(8,2),@car_totalvipprice numeric(8,2)
--定義一個(gè)查詢membercar表的游標(biāo)變量。獲取數(shù)據(jù)
declare car_cursor cursor for
select id,wareid,warenum from [membercar] where [email protected] and ispay=0
--建立一個(gè)臨時(shí)表變量
declare @car_table table (id int,
wareid int,warenum smallint,marketprice numeric(8,2),memberprice numeric(8,2),vipprice numeric(8,2))
--打開(kāi)membercar表提取數(shù)據(jù)到臨時(shí)變量
open car_cursor
fetch next from car_cursor into @car_id,@car_wareid,@car_warenum
while @@fetch_status = 0
begin
--取得商品的總市場(chǎng)價(jià)、總會(huì)員價(jià)和總vip價(jià)
select @car_totalmarketprice=marketprice*@car_warenum,@car_totalmemberprice=memberprice*@car_warenum,@car_totalvipprice=vipprice*@car_warenum from [ware] where [email protected]_wareid
--添加進(jìn)臨時(shí)變量表
insert into @car_table (id,wareid,warenum,marketprice,memberprice,vipprice) values (@car_id,@car_wareid,@car_warenum,@car_totalmarketprice,@car_totalmemberprice,@car_totalvipprice)
-- 沒(méi)有到表尾,繼續(xù)提取數(shù)據(jù)到臨時(shí)變量
fetch next from car_cursor into @car_id,@car_wareid,@car_warenum
end
--關(guān)閉membercar數(shù)據(jù)庫(kù)的游標(biāo)
close car_cursor
deallocate car_cursor
--返回最終數(shù)據(jù)表
select * from @car_table
go
要求表達(dá)不是很清楚,各位原諒...