|
游標(biāo)中用到的函數(shù),就是前一篇文章中創(chuàng)建的那個函數(shù)。
另外,為了方便使用,把游標(biāo)放在存儲過程中,這樣就可以方便地直接使用存儲過程來執(zhí)行游標(biāo)了。
1 create procedure UpdateHKUNo --存儲過程里面放置游標(biāo) 2 as 3 begin 4 5 declare UpdateHKUNoCursor cursor --聲明一個游標(biāo),查詢滿足條件的數(shù)據(jù) 6 for select psn_code from person where type='E' and hku_no is null 7 8 open UpdateHKUNoCursor --打開 9 10 declare @noToUpdate varchar(20) --聲明一個變量,用于讀取游標(biāo)中的值 11 fetch next from UpdateHKUNoCursor into @noToUpdate 12 13 while @@fetch_status=0 --循環(huán)讀取 14 begin 15 --print @noToUpdate 16 update person set hku_no=dbo.GetExtUserHKUNo() where psn_code=@noToUpdate 17 fetch next from UpdateHKUNoCursor into @noToUpdate 18 end 19 20 close UpdateHKUNoCursor --關(guān)閉 21 22 deallocate UpdateHKUNoCursor --刪除 23 24 end 25 26 --exec UpdateHKUNo
另外,判斷數(shù)據(jù)庫中是否存在某一存儲過程(Sqlserver 2000):
if exists (select * from sysobjects where name= 'UpdateHKUNo' and xtype ='P') print 'yse' else print 'no'
既然說到存儲過程,順便記錄多一些~
一、無參數(shù)的存儲過程的創(chuàng)建、修改、執(zhí)行、刪除
create procedure Myprocedure --創(chuàng)建,修改時是alter as begin --do something select * from sysobjects end
execute Myprocedure --執(zhí)行
drop procedure Myprocedure
二、帶傳入?yún)?shù)的存儲過程:
 View Code
傳入?yún)?shù),還有另外一種形式
create proc ProcWithParam --創(chuàng)建帶有傳入?yún)?shù)的存儲過程 @id int --參數(shù)沒有用括號標(biāo)記 as begin select * from sysobjects where id=@id --使用參數(shù) end
exec ProcWithParam 4 --執(zhí)行時,在右邊附帶參數(shù)
drop proc ProcWithParam
三、帶傳出參數(shù)的存儲過程(如果要傳入、傳出的,則把這個和前面第二個綜合就好啦):)
create proc ProuWithParamOut(@date datetime out) --不帶out,將被默認(rèn)為傳入?yún)?shù)! as begin select @date=crdate from sysobjects where id=1 --傳出參數(shù)只能是一個值,如果不帶條件地查找,得到的數(shù)值是一個列表,將只取最后一個值 end
declare @date datetime --聲明一個變量,用于接收存儲過程傳出的參數(shù) exec ProuWithParamOut @date out --調(diào)用時,需要右邊附帶用于接收傳出參數(shù)的變量 select @date as '存儲過程傳出的參數(shù)' --取得傳出的參數(shù),并自定義列名
注:傳出參數(shù)的聲明也可以像傳入?yún)?shù)那樣寫,不需括號
create proc ProuWithParamOut --不帶out,將被默認(rèn)為傳入?yún)?shù)! @date datetime out as begin select @date=crdate from sysobjects where id=4 --傳出參數(shù)只能是一個值,如果不帶條件地查找,得到的數(shù)值是一個列表,將只取最后一個值 end
|