Sql Server 游標(利用游標逐行更新數據)、存儲過程


游標中用到的函數,就是前一篇文章中創建的那個函數。

另外,為了方便使用,把游標放在存儲過程中,這樣就可以方便地直接使用存儲過程來執行游標了。

 1 create procedure UpdateHKUNo    --存儲過程里面放置游標
2 as
3 begin
4
5 declare UpdateHKUNoCursor cursor --聲明一個游標,查詢滿足條件的數據
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) --聲明一個變量,用於讀取游標中的值
11 fetch next from UpdateHKUNoCursor into @noToUpdate
12
13 while @@fetch_status=0 --循環讀取
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 --關閉
21
22 deallocate UpdateHKUNoCursor --刪除
23
24 end
25
26 --exec UpdateHKUNo

另外,判斷數據庫中是否存在某一存儲過程(Sqlserver 2000):

if exists (select * from sysobjects where name= 'UpdateHKUNo' and xtype ='P')
print 'yse'
else
print 'no'


既然說到存儲過程,順便記錄多一些~

一、無參數的存儲過程的創建、修改、執行、刪除

View Code
create procedure Myprocedure    --創建,修改時是alter
as
begin
--do something
select * from sysobjects
end

execute Myprocedure --執行

drop procedure Myprocedure

二、帶傳入參數的存儲過程:

View Code

  傳入參數,還有另外一種形式

View Code
create proc ProcWithParam   --創建帶有傳入參數的存儲過程
@id int --參數沒有用括號標記
as
begin
select * from sysobjects where id=@id --使用參數
end

exec ProcWithParam 4 --執行時,在右邊附帶參數

drop proc ProcWithParam

三、帶傳出參數的存儲過程(如果要傳入、傳出的,則把這個和前面第二個綜合就好啦):)

View Code
create proc ProuWithParamOut(@date datetime out)    --不帶out,將被默認為傳入參數!
as
begin
select @date=crdate from sysobjects where id=1 --傳出參數只能是一個值,如果不帶條件地查找,得到的數值是一個列表,將只取最后一個值
end

declare @date datetime --聲明一個變量,用於接收存儲過程傳出的參數
exec ProuWithParamOut @date out --調用時,需要右邊附帶用於接收傳出參數的變量
select @date as '存儲過程傳出的參數' --取得傳出的參數,並自定義列名

注:傳出參數的聲明也可以像傳入參數那樣寫,不需括號

create proc ProuWithParamOut    --不帶out,將被默認為傳入參數!
@date datetime out
as
begin
select @date=crdate from sysobjects where id=4 --傳出參數只能是一個值,如果不帶條件地查找,得到的數值是一個列表,將只取最后一個值
end







免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM