[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