use [newsite]
go/****** object: storedprocedure [dbo].[pro_cutpoint] script date: 04/21/2011 10:49:16 ******/
set ansi_nulls on
goset quoted_identifier on
goalter procedure [dbo].[pro_cutpoint]
--要扣除的總分數
@sumpoint int,
--表userpointrecord用到的資料
@userid nvarchar(50),--使用者id
--表user_usedpoint用到的資料
@recordtypeid int,
@recordtype nvarchar(1000),
@orderid int,
--表user_pointusehistory用到的資料
@actionid int,
@actionname varchar(50)
as--開啟自動回滾事務
set xact_abort on
begin transaction cuttran
declare cursor_cutpoint scroll cursor
forselect pointrecord_id,point,userpoint from userpointrecord where point>userpoint and userid=@userid and createdate>dateadd(month,-18,getdate()) and isvalid=1 order by createdate asc--某使用者的所有未用完積分的記錄
declare @pointrecord_id int;
declare @point int;
declare @userpoint int;
open cursor_cutpoint
fetch next from cursor_cutpoint into @pointrecord_id,@point,@userpoint
while (@@fetch_status=0)
begin
if(@sumpoint>(@point-@userpoint))--如果要扣除的分數大於當前記錄剩餘的分數
begin
set @sumpoint=@sumpoint-(@point-@userpoint)
update userpointrecord set userpoint=@point where pointrecord_id=@pointrecord_id
if(@@error<>0)
begin
rollback transaction cuttran
endinsert into user_usedpoint values(@recordtypeid,@recordtype,@pointrecord_id,@orderid,-(@point-@userpoint),0,getdate(),1)
if(@@error<>0)
begin
rollback transaction cuttran
endinsert into user_pointusehistory values(@actionid,@actionname,-(@point-@userpoint),@userid,getdate(),@userid,getdate())
if(@@error<>0)
begin
rollback transaction cuttran
endend
else if(@sumpoint<=(@point-@userpoint))
begin
update userpointrecord set userpoint=@sumpoint+@userpoint where pointrecord_id=@pointrecord_id
if(@@error<>0)
begin
rollback transaction cuttran
endinsert into user_usedpoint values(@recordtypeid,@recordtype,@pointrecord_id,@orderid,-@sumpoint,0,getdate(),1)
if(@@error<>0)
begin
rollback transaction cuttran
endinsert into user_pointusehistory values(@actionid,@actionname,-@sumpoint,@userid,getdate(),@userid,getdate())
if(@@error<>0)
begin
rollback transaction cuttran
endbreak
endfetch next from cursor_cutpoint into @pointrecord_id,@point,@userpoint
endclose cursor_cutpoint
deallocate cursor_cutpoint
commit transaction cuttran
游標的使用
declare sql varchar 8000 password varchar 200 密碼 tbname varchar 500 資料庫.dbo.表名,如果不指定 dbo.表名,則匯出資料庫的所有使用者表 filename varchar 1000 匯入 匯出路徑 檔名,如果 tbname引數...
游標的使用
游標 cursor 是處理資料的一種方法,為了檢視或者處理結果集中的資料,游標提供了在結果集中一次以行或者多行前進或向後瀏覽資料的能力。我們可以把游標當作乙個指標,它可以指定結果中的任何位置,然後允許使用者對指定位置的資料進行處理。1.游標的組成 游標包含兩個部分 乙個是游標結果集 乙個是游標位置。...
游標的使用
declare userid varchar 20 將 temp2 值賦給當前游標 declare c getdata cursor forselect userid from temp2 開啟當前游標 並將游標值賦給變數 open c getdata fetch c getdata into us...