[SQL SERVER][TSQL]取代Cursor操作

[SQLSERVER][TSQL]取代Cursor操作

自己在工作開發上(雖然很少開發...XD)遇到要執行一筆一筆的操作,

我會盡量避免使用Cursor來處理(原因可看這),而想其他方法來取代,

剛好看到網友詢問,這裡順手紀錄針對一筆一筆操作不使用Cursor做法。

 

需求:取得來源資料表col2欄位並依col1條件逐筆更新目的資料表c2欄位(@desttbl)

declare 
@step int,
@uplimit int,
@currentid int,
@maxcount int,
@nextrowid int,
@c1data int,
@c2data varchar(30);
set @uplimit=1000; 
set @step=1;
--建立來源資料表
declare @sourcetbl table 
(
col1 int identity(1,1) primary key not null,
col2 varchar(30) null
)  
--建立目的資料表
declare @desttbl table
(
c1 int not null, 
c2 varchar(30) null,
c3 datetime 
)

--新增資料
while(@step<@uplimit+1)
begin
set @c1data=FLOOR((@uplimit)*RAND());
insert into @sourcetbl values('rico'+convert(varchar,@step)); 
insert into @desttbl values(@c1data,'',getdate());
set @step=@step+1;
end
select @maxcount=count(1) from @sourcetbl; 
select @currentid=min(col1) from @sourcetbl; 
  
--取得來源資料表col2欄位並依col1條件更新目的資料表c2欄位(@desttbl)
while(@currentid<=@maxcount)
begin
select 
@currentid=col1,
@c2data=col2 
from @sourcetbl
where col1=@currentid;
update @desttbl set c2=@c2data where c1=@currentid;

-- 取得下一筆資料
SELECT @nextrowid = MIN(col1)
FROM @sourcetbl
WHERE col1 > @currentid ; 
set @currentid=@nextrowid; 
end
--查看結果
select * from @desttbl 

 

 

 

 

 

 

 

image