雙重游標的使用以及動態游標的使用

2021-08-24 19:21:40 字數 2379 閱讀 6523

今天天有個網友 讓我寫這樣乙個過程給他

個人表資訊表結構:

家庭編碼 個人名字 個人編號

312344 劉海源

312344 孔祥玉

312345 梁永勝

312345 高少芝

說明:

4 條個人資訊中 由 家庭編碼相同的為乙個家庭 上面是有2個家庭 每個家庭有2個人

比如: 劉海源 和 孔祥玉 有相同的家庭編碼 說明他們同屬乙個家庭

「個人編號」 字段 是存放 個人在家庭中的編號,有約束為:同一家庭的個人編號不能重複

比如:如果劉海源的個人編號是1 孔祥玉 的個人編號也是1 就違反這個約束了。

需求: 給字段 「個人編號」 賦值 用其標記 在家庭中的編號

注:想要乙個 游標 首先 查詢出乙個結果集 存放「家庭編碼」相同的記錄,

然後 在結果集裡迴圈 給「個人編號」賦值 如: 1 2 3 4 5 之類

想要的結果:

家庭編碼 個人名字 個人編號

312344 劉海源 1

312344 孔祥玉 2

312345 梁永勝 1

312345 高少芝 2

解決方案方案二

declare my_cursor cursor scroll dynamic

forselect 家庭編碼 from test2 order by 家庭編碼 asc

open my_cursor

declare @next_code nvarchar(10)

declare @cur_code nvarchar(10)

while 1=1

begin

fetch my_cursor into @cur_code

if @@fetch_status<>0

break

begin

fetch next from my_cursor into @cur_code

declare @pro_name as nvarchar(10),@cur_name as nvarchar(10)

declare code cursor scroll dynamic

for select 家庭編碼,個人名字 from test2 where 家庭編碼=@next_code

open code

declare @rowcount integer,@i integer

set @i=1

set @rowcount=@@cursor_rows

while 1=1

begin

fetch code into

@cur_code,

@cur_name

if @@fetch_status<>0

break

update test2 set 個人編號=@i where current of code

set @i=@i+1

endclose code

deallocate code

set @i=1

endend

close my_cursor

deallocate my_cursor

方案二declare my_cursor cursor

forselect distinct 家庭編碼 from test2 order by 家庭編碼 asc

open my_cursor

declare @cur_name as nvarchar(10),@cur_code nvarchar(10)

while 1=1

begin

fetch my_cursor into @cur_code

if @@fetch_status<>0

break

begin

declare code cursor local

for select 家庭編碼,個人名字 from test2 where 家庭編碼=@cur_code

open code

declare @rowcount integer,@i integer

set @i=1

while 1=1

begin

fetch code into

@cur_code,

@cur_name

if @@fetch_status<>0

break

update test2 set 個人編號=@i where current of code

set @i=@i+1

endclose code

deallocate code

set @i=1

endend

close my_cursor

deallocate my_cursor

游標的使用

declare sql varchar 8000 password varchar 200 密碼 tbname varchar 500 資料庫.dbo.表名,如果不指定 dbo.表名,則匯出資料庫的所有使用者表 filename varchar 1000 匯入 匯出路徑 檔名,如果 tbname引數...

游標的使用

游標 cursor 是處理資料的一種方法,為了檢視或者處理結果集中的資料,游標提供了在結果集中一次以行或者多行前進或向後瀏覽資料的能力。我們可以把游標當作乙個指標,它可以指定結果中的任何位置,然後允許使用者對指定位置的資料進行處理。1.游標的組成 游標包含兩個部分 乙個是游標結果集 乙個是游標位置。...

游標的使用

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 ...