SqlServer儲存過程中迴圈的使用

2021-10-04 16:09:37 字數 1721 閱讀 7952

1.while迴圈

格式示例如下:

declare

@iint

set@i=1

while

@i<

30begin

insert

into test (userid)

values(@i

)set@i=

@i+1end

2.游標迴圈

格式示例如下:

declare

@a1varchar(10

),@a2varchar(10

),@a3int

declare youcurname cursor

forselect a1,a2,a3 from youtablename

open youcurname

fetch

next

from youcurname into

@a1,

@a2,

@a3while @@fetch_status

<>-1

begin

--您要執行的操作寫在這裡

fetch

next

from youcurname into

@a1,

@a2,

@a3end

close youcurname

deallocate youcurname

游標迴圈中主要做的事情有以下幾點

1、把記錄集傳給游標;

2、開啟游標

3、開始迴圈

4、從游標中取值

5、檢查那一行被返回

6、處理

7、關閉迴圈

8、關閉游標

在儲存過程中使用游標時,當游標中執行的**報錯時,會導致儲存過程直接報錯,進一步導致**不會執行到銷毀游標處。所以在儲存過程中使用游標時,為了更加安全的執行,應該先判斷游標是否存在,這個sqlserver資料庫已內建乙個函式幫助我們確認游標的狀態。詳細如下:

檢查游標的狀態:

cursor_status(

'global',''

)=1then

'游標的結果集至少有一行'

cursor_status(

'global',''

)=0then

'游標的結果集為空'

cursor_status(

'global',''

)=-1

then

'游標被關閉'

cursor_status(

'global',''

)=-2

then

'游標不適用'

cursor_status(

'global',''

)=-3

then

'游標不存在'

--第二個引數為游標名

可用如下語句驗證

declare groupcur cursor

forselect1;

open groupcur ;

close groupcur ;

deallocate groupcur ;

select cursor_status(

'global'

,'groupcur'

);

Sqlserver儲存過程中經常使用的迴圈

1 游標的使用 sql server游標的使用 declare date2 datetime declare tabb cursor cursor for select date,weeknum,studytime from tabb where date date order by date op...

SQLServer 儲存過程中各種判斷是否為空

1.判斷是否存在這樣的記錄 if not exists 和 if exists 相對應 例 使用者是否存在 if not exists if exists select 1 from user nolock where username abcd begin print 使用者存在 end else...

sqlserver中在儲存過程中寫事務

由於對資料的操作經常需要併發,所以在儲存過程中使用事務是非常必要的,我經常這樣處理 if exists select from sys.objects where name sp drop proc sp gocreate procedure sp 引數列表.out bit 0 output 輸出引...