sql servser游標和遞迴工作中案例

2021-09-27 17:57:25 字數 1536 閱讀 4071

---游標

declare @dname nvarchar(255)

declare cur cursor for  

select left(單位,charindex('|',單位)-1) from(

select distinct(單位) 單位 from view_sys_data_院內科室) temp

open cur

fetch next from cur into @dname

while(@@fetch_status=0)

begin

insert into sys_department_temp(d_name,d_pid,iscompany)values(@dname,0,1)

declare @did int

select @did=ident_current('sys_department_temp')--d_pid

print @dname

insert into  sys_department_temp(d_name,d_pid,iscompany,tp_id) select 院內科室,@did,0,tp_id from view_sys_data_院內科室 where 單位 like @dname+'%'    

fetch next from cur into @dname

endclose cur

deallocate cur

---遞迴

update sys_staff set ext016=(select left(單位,charindex('|',單位)-1) from dbo.view_sys_data_人員管理  where  id=ext010),

ext015=(select 院內科室 from dbo.view_sys_data_人員管理  where  id=ext010)

/*select id,s_realname, ext015,ext016,ext010 from sys_staff where id=34339--32669

select * from sys_staff where id=34339

select * from  dbo.view_sys_data_人員管理 where id=32669--第九人民醫院|4eccc3be-2537-4757-98a3-805b1379d282輔助生殖科

select * from sys_staff where ext010=32669

*/with temp as(

select ta.id as pid,ta.d_name as pd_name,tb.id as id,tb.d_name  as d_name from sys_department_temp ta left join sys_department_temp tb on ta.id=tb.d_pid

)update sys_staff_temp set s_department1=(select pid from temp where (d_name=ext015 and pd_name=ext016))

游標資料修改和游標變數

修改游標資料 如果建立的游標需要執行更新或者刪除必須帶有for update子句,for update子句會將游標提取出來的資料進行行級鎖定,這樣在本會話更新期間,其他使用者的會話就不能對當前游標中的資料進行更新操作,for update有如下兩種形式 for update of 列,列.為游標中的...

ORACLE 游標和游標變數的區別

如何定義游標型別 type ref type name is ref cursor return return type 宣告游標變數 cursor name ref type name 從技術底層看,兩者是相同的。普通plsql cursor在定義時是 靜態 的。而ref cursors可以動態開...

Oracle游標和游標變數的區別

oracle游標我們經常用到,下面介紹oracle游標和游標變數的區別。oracle游標是資料庫中乙個命名的工作區,當游標被宣告後,他就與乙個固定的sql想關聯,在編譯時刻是已知的,是靜態的,它永遠指向乙個相同的查詢工作區。游標變數可以在執行時刻與不同的sql語句關聯,在執行時可以取不同的sql語句...